七大布局分别是:线性布局(LinearLayout)、相对布局(RelativeLayout)、帧布局(FrameLayout)、表格布局(TableLayout)、绝对布局(absoluteLayout)、网格布局(GridLayout)、约束布局(ConstraintLayout)
线性布局(LinearLayout)
主要属性:
1.orientation设置布局管理器内组件的排列方式,可以设置horizontal(横向)、vertical(纵向)两者之一
2.gravity设置布局管理器内组件的对齐方式,layout_gravity控制在父元素的位置。
image.png
3.layout_weight设置权重,推荐layout_width="0dp"或layout_height="0dp"
相对布局(RelativeLayout)
image.png
帧布局(FrameLayout)
继承自ViewGroup组件,可以使布局叠加。
表格布局(TableLayout)
TableLayout包裹TableRow(行数),TableRow包裹View(列数)
shrinkColumns属性:当TableRow里的空间布满布局的时候,指定列自动延伸填充可用部分。当TableRow里控件还没布满不觉,不起作用。可收缩列。
stretchColumns属性:设置可伸展的列,该列可以向行方向伸展,最多可占据一整行。
collapseColumns属性:设置要隐藏的列。
以上三个属性的列号都是从0开始计算,比如shrinkColumns=“2”表示第三列,可以设置多个,用逗号隔开,比如“0,2”,如果所有列都生效用“*”。
android:layout_column = "2",表示跳过第二个,直接显示到第三个格子处,从1开始算。
android:layout_span = "4" 表示合并4个单元格
绝对布局(absoluteLayout)
基本不使用
网格布局(GridLayout)
Android4.0新引入的网格矩阵形式布局控件。
使用的时候需要注意兼容,引入依赖:
compile 'com.android.support:gridlayout-v7:22.+'
GridLayout属性:
android:columnCount 最大列数
android:rowCount 最大行数
android:orientation 子元素中的布局方向
android:alignmentMode alignBounds:对齐子视图边界/alignMargins:对齐子视距内容
android:columnOrderPreserved 使列边界显示的顺序和列索引的顺序相同,默认true
android:rowOrderPreserved 使行边界显示的顺序和行索引的顺序相同,默认是true
android:useDefaultMargins 没有指定视图的布局参数时使用默认的边距,默认值是false
item属性:
android:layout_column 指定该单元格在第几列显示
android:layout_row 指定该单元格在第几行显示
android:layout_columnSpan 指定该单元格占据的列数
android:layout_rowSpan 指定该单元格占据的行数
android:layout_gravity 指定该单元格在容器中的位置
android:layout_columnWeight (API21新增)列权重
android:layout_rowWeight (API21新增)行权重
注意:layout_columnSpan、layout_rowSpan所使用时需要加上layout_gravity属性,否则没有效果。另外item在边缘时宽高会计算错误,需要手动设置宽高。
动态代码设置布局会使用到方法GridLayout.spec();
public static Spec spec(int start, int size)
public static