在Android中提供了几个常用布局:

  1. LinearLayout线性布局
  2. RelativeLayout相对布局
  3. FrameLayout帧布局
  4. AbsoluteLayout绝对布局
  5. TableLayout表格布局
  6. GridLayout网格布局

TableLayout表格布局

TableLayout的介绍

TableLayout是将子类向分别排列成行和列的布局视图容器,TableLayout是由许多TableRow对象组成的,表格布局以行列的形式管理子控件,每一个单元是一个TableRow或者View对象。

TableLayout中可以通过setConlumnShrinkable()setConlumnStretchable()方法来指定某些列为可以缩小或可伸缩,列是从0开始计数的,第一列为0。

属性

常用的几种属性:

stretchColumns设置运行被拉伸的列的序号,如android:stretchColumns="2,3"表示在第三列的和第四列的一起填补空白,如果要所有列一起填补空白,则用“*”符号,列号都是从0开始算的。

shrinkColumns设置被收缩的列的序号,收缩是用于在一行中列太多或者某列的内容文本过长,会导致某列的内容会被挤出屏幕,这个属性是可以帮助某列的内容进行收缩,用于防止被挤出的。

android:collapseColumns设置需要被隐藏的列的序号,使用该属性可以隐藏某列。

android:layout_column为该子类控件显示在第几列android:layout_column="2"表示跳过第二个,直接显示在第三个单元格内。

android:layout_span为该子类控件占据第几列android:layout_span="3"表示合并3个单元格,就是这个组件将占据3个单元格。

collapseColumns隐藏列

效果如图:

android:collapseColumns = "0,2",用于隐藏第一列和第三列,代码如下:

<TableLayout
android:id="@+id/TableLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:collapseColumns="0,2" >
<TableRow> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="one" /> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="two" /> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="three" /> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="four" /> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="five" />
</TableRow>
</TableLayout>

stretchColumns拉伸列

android:stretchColumns = “1”,设置为第二列为可拉伸列的列,让该列填满这一行所有的剩余空间,也就是在整个父宽度的情况在,放几个按钮,剩下的空间宽度将用第二列填满,代码如下:

<TableLayout
android:id="@+id/TableLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:stretchColumns="1" > <TableRow> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="one" /> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="two" /> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="three" /> </TableRow>
</TableLayout>

shrinkColumns收缩列

android:shrinkColumns="1"表示将第二列的内容进行收缩,如果屏幕的额宽度包容不下的话,就会拿第二列进行收缩,就是压扁,拉长。如同上代码进行修改即可,多加些内容,让其文本内容超出屏幕吧!

GridLayout网格布局

GridLayout网格布局是在Android 4.0以后引入的一种新的布局模式,和表格布局是有点类似的,但比表格布局的好,功能也是很强大的,它可以设置布局有多少行和有多少列,也可以设置布局中的组件的排列方式,也可以设置组件的位置,横跨多少行,多少列。

属性的那点东西

android:orientation用于设置vertical竖直或horizontal水平。

android:layout_gravity设置对齐方式,可以设置center,right,left等。

android:rowCount可以设置行数,要多少行设置多少行,如android:rowCount="2"为设置网格布局有2行。

android:columnCount可以设置列数,要多少列设置多少列,如android:columnCount="2"为设置网格布局有2列。

android:layout_row设置组件位于第几行,从0开始计数的,如android:layout_row="1"为设置组件在第2行。

android:layout_column设置组件位于第几列,从0开始计数的,如android:layout_column="1"为设置组件在第2列。

android:layout_rowSpan设置组件横跨几行,如android:layout_rowSpan="2"为纵向横跨2行。

android:layout_columnSpan设置组件横跨几列,如android:layout_columnSpan="2"为橫向横跨2列。

注意事项:低版本sdk是如何使用GridLayout的呢?要导入v7包的gridlayout包即可,因为GirdLayout是4.0后才推出的,标签代码。

<android.support.v7.widget.GridLayout>

FrameLayout帧布局

FrameLayout帧布局是什么样的呢?所有子控件都放在左上角且后面元素都是直接覆盖在前面元素之上一种布局模式。

常用属性:

android:foreground设置改帧布局容器的前景图像,什么是前景图像,前景图像是永远处于帧布局容器的最上面的图像,就是不会被覆盖的图片。

android:foregroundGravity设置前景图像显示的位置

列子代码

<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/FrameLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"> <TextView
android:layout_width="200dp"
android:layout_height="200dp"
android:background="#FF6143" />
<TextView
android:layout_width="150dp"
android:layout_height="150dp"
android:background="#7BFE00" />
<TextView
android:layout_width="100dp"
android:layout_height="100dp"
android:background="#FFFF00" /> </FrameLayout>

用帧布局可以做出霓虹灯的效果,即为每个TextVeiw设置layout_gravity="center"即可,即可以看到不一样的效果。

AbsoluteLayout绝对布局

AbsoluteLayout绝对布局是通过x,y位置来为子控件设置位置的,即android:layout_x和android:layout_y属性。

由于绝对布局不常见,不常用,因为在不同大小的适配屏幕上的位置直观上会变化,适应能力差,所以不建议使用。

RelativeLayout相对布局

RelativeLayout是一个相对布局的视图组,用来显示相对位置的子视图类,在默认情况下,所有子视图对会分布在左上角。

这里简单温习一下相关属性即可:

android:layout_below位于某控件下方,以id为标记

android:layout_above位于某控件上方,以id为标记

android:layout_toLeftOf位于某控件左方,以id为标记

android:layout_toRightOf 位于某控件右方,以id为标记

android:layout_alignBottom与某控件底部对齐,以id为标记

android:layout_alignTop与某控件顶部对齐,以id为标记

android:layout_alignLeft与某控件左边缘对齐,以id为标记

android:layout_alignRight 与某控件右边缘对齐,以id为标记

android:layout_alignBaseline与某控件的文本内容在一条直线上

android:layout_alignParentBottom在父容器最下,为true或false

android:layout_alignParentTop在父容器最上,为true或false

android:layout_alignParentLeft 在父容器最左,为true或false

android:layout_alignParentRight 在父容器最右,为true或false

android:layout_marginTop和父容器上端的距离,单位为dp

android:layout_marginBottom和父容器下端的距离,单位为dp

android:layout_marginLeft和父容器左端的距离,单位为dp

android:layout_marginRight和父容器右端的距离,单位为dp

android:layout_margin和父容器四周的距离,单位为dp

android:layout_centerVertical在父类的垂直居中,为true或false

android:layout_centerHorizontal 在父类的水平居中,为true或false

android:layout_centerInParent在父类的水平垂直居中

结论

线性布局:

指子控件以水平或垂直方式排列

相对布局:

指子控件以控件之间的相对位置或子控件相对于父容器的位置排列

帧布局:

指所有子控件均放在左上角且后面元素直接覆盖在前面元素之上

绝对布局:

指子控件通过绝对定位x,y位置来决定其位置摆放

表格布局:

指以行列的形式放置子控件,每一行是一个TableRow对象或者View对象

结语

  • 本文主要讲解 Android精通:TableLayout布局,GridLayout网格布局,FrameLayout帧布局,AbsoluteLayout绝对布局,RelativeLayout相对布局
  • 下面我将继续对Java、 Android中的其他知识 深入讲解 ,有兴趣可以继续关注
  • 小礼物走一走 or 点赞

Android精通:TableLayout布局,GridLayout网格布局,FrameLayout帧布局,AbsoluteLayout绝对布局,RelativeLayout相对布局的更多相关文章

  1. android的布局-----GridLayout(网格布局)

    学习导图 (一)简介 网格布局由GridLayout所代表,在android4.0之后新增加的布局管理器,因此需要android4.0之后的版本中使用,如果在更早的平台使用该布局管理器,则需要导入相应 ...

  2. Android布局管理器-使用FrameLayout帧布局管理器显示层叠的正方形以及前景照片

    场景 Android布局管理器-使用LinearLayout实现简单的登录窗口布局: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details ...

  3. Android精通:View与ViewGroup,LinearLayout线性布局,RelativeLayout相对布局,ListView列表组件

    UI的描述 对于Android应用程序中,所有用户界面元素都是由View和ViewGroup对象构建的.View是绘制在屏幕上能与用户进行交互的一个对象.而对于ViewGroup来说,则是一个用于存放 ...

  4. Android中帧布局-FrameLayout和网格布局-GridLayout

    帧布局-FrameLayout 一.概念 帧布局中,容器为每个加入其中的空间创建一个空白的区域(成为一帧).每个空间占据一帧,这些帧会按gravity属性自动对齐. 帧布局的效果是将其中的所有空间叠加 ...

  5. Android零基础入门第32节:新推出的GridLayout网格布局

    原文:Android零基础入门第32节:新推出的GridLayout网格布局 本期主要学习的是网格布局是Android 4.0新增的布局,和前面所学的TableLayout表格布局 有点类似,不过他有 ...

  6. 【Android】7.3 GridLayout(网格布局)

    分类:C#.Android.VS2015: 创建日期:2016-02-10 一.简介 Android 4.0(API 14)开始提供的GridLayout布局使用虚细线将布局划分为行.列和单元格,也支 ...

  7. Android之GridLayout网格布局

    1.相关属性 GridLayout网格布局是4.0之后引入的布局方式! android:columnCount="4" //设置列数(4列) android:rowCount=&q ...

  8. Android零基础入门第30节:两分钟掌握FrameLayout帧布局

    原文:Android零基础入门第30节:两分钟掌握FrameLayout帧布局 前面学习了线性布局.相对布局.表格布局,那么本期来学习第四种布局--FrameLayout帧布局. 一.认识FrameL ...

  9. android布局 FrameLayout(帧布局)详解

    看到一篇很有趣的文章对我就是冲着萌妹子看的 FrameLayout(帧布局) 前言 作为android六大布局中最为简单的布局之一,该布局直接在屏幕上开辟出了一块空白区域, 当我们往里面添加组件的时候 ...

随机推荐

  1. ffmpeg使用经验

    1.工作要使用ffmpeg将视频转换成H264格式,网上查到的很多使用方法都是如下: ffmpeg -i input.mov -c:v libx264 -crf output.mov -i后面表示输入 ...

  2. pip install 提示代理连接失败原因及解决办法

    # pip install 提示代理连接失败原因及解决办法 1. 错误提示 在公司电脑上安装Python的虚拟环境时输入命令: pip install virtualenv 系统提示以下异常信息: R ...

  3. 在delphi中XLSReadWriteII.组件的应用实例(2)

    第三方组件:XLSReadWriteII.v.5.20.67_XE3 实例源码如下:   unit Unit1; interface uses Winapi.Windows, Winapi.Messa ...

  4. ArcGIS自定义工具箱-修复损坏的工作空间

    ArcGIS自定义工具箱-修复损坏的工作空间 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 目的:替换数据源的工作空间 用途:针对损坏的数据源,批量进行修复 案例数 ...

  5. SSM商城项目(九)

    1.   学习计划 1.Activemq整合springMQ的应用场景 2.添加商品同步索引库 3.商品详情页面动态展示 4.展示详情页面使用缓存 2.   Activemq整合spring 2.1. ...

  6. idea导入eclipse项目的配置

    idea导入eclipse项目需要的配置 1.配置jdk,这两处选择一样就可以,也可以根据自己需求选择,上边的比下边的版本高就行 2.这里会默认和配置jdk一样 3.添加lib依赖,选择到项目的lib ...

  7. Python练习-列表生成式-2018.11.30

    #用列表生成式创建[1x1, 2x2, 3x3, ..., 10x10] print([x*x for x in range(1,11)]) #用列表生成式创建[2x2, 4x4,,6×6,..., ...

  8. [leetcode]70. Climbing Stairs爬楼梯

    You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb ...

  9. MVC的SignalR例子

    # SignalR学习 ASP.NET SignalR 是为.NET 开发者提供即时通讯Web 应用的类库.即时通讯Web服务就是服务器将内容自动推送到已经连接的客户端,而不是服务器等待客户端发起一个 ...

  10. MySQL数据查询之单表查询

    单表查询 简单查询 - 创建表 DROP TABLE IF EXISTS `person`; CREATE TABLE `person` ( `id` ) NOT NULL AUTO_INCREMEN ...