Android 六大布局

在 Android 中,所有的 UI 元素都是通过 View 和 ViewGroup 构建的,两者之间也可以相互嵌套。这里直接引用Android.view.View 类全貌【思维导图】里面的视图类 View 及子类的继承关系图:
视图类View及子类的继承关系图

从上图中可以看出所有的布局控件都直接/间接继承了 ViewGroup,所以它们都支持 ViewGroup 的属性:

属性 描述
android:id 布局标识
android:layout_width 布局宽度
android:layout_height 布局高度
android:background 布局背景
android:layout_margin 布局外边距
android:padding 布局内边距
android:minWidth 布局最小宽度
android:minHeight 布局最小高度

RelativeLayout(相对布局)

相对布局可以设置某一个视图相对于其他视图的位置,即是以其他控件或父容器为参照物设置位置的。常用属性:

类型属性描述
相对父级android:layout_centerInParent相对父级水平垂直居中
android:layout_centerVertical相对父级垂直居中
android:layout_centerHorizontal相对父级水平居中
android:layout_centeralignParentTop相对父级顶部对齐
android:layout_centeralignParentRight父级水右对齐
android:layout_centeralignParentBottom父级水底部对齐
android:layout_centeralignParentLeft父级水左对齐
相对兄弟android:layout_above在某个控件上方
android:layout_below在某个控件下方
android:layout_toLeftOf在某个控件左侧
android:layout_toRightOf在某个控件右侧
android:layout_alginTop与某个控件顶部对齐
android:layout_alginBottom与某个控件底部对齐
android:layout_alginLeft与某个控件左侧对齐
android:layout_alginRight与某个控件右侧对齐

LinearLayout(线性布局)

线性布局是最常用的布局方式,可分为水平线性布局和垂直线性布局。常用属性:

属性 描述
android:orientation 布局排列方式
android:gravity 相对父级对齐方式
android:layout_gravity 相对父级对齐方式
android:layout_weight 权重,等比划分区域
android:divider 分割线
android:showDividers 分割线所在位置 none、beginning、end、middle
android:dividerPadding 分割线的 padding

RelativeLayout(网格布局)

网格布局是 Android4.0 新增的布局,它实现了控件的交错显示,能够避免因布局嵌套对设备性能的影响,更利于自由布局的开发。 网格布局用一组无限细的直线将绘图区域分成行、列和单元,并指定控件的显示区域和控件在该区域的显示方式。常用属性:

属性 描述
android:columnCount 列总数
android:rowCount 行总数
android:layout_column 第几列
android:layout_row 第几行
android:layout_columnSpan 跨列
android:layout_rowSpan 跨行
android:dividerPadding 分割线的 padding

TableLayout(表格布局)

表格布局将子元素的位置分配到行或列中,与网格布局不同的是,它不需要明确多少行、多少列。一个 TableLayout 由许多 TableRow 组成,每个 TableRow 都会定义一个 Row。常用属性:

属性 描述
android:stretchColumns 该列被拉伸
android:shrinkColumns 该列被收缩
android:collapseColumns 该列被隐藏
android:layout_column 单元格显示位置
android:layout_span 单元格行数,默认 1 行

FrameLayout(帧布局)

帧布局用于在屏幕上创建一块空白区域,添加到该区域中的每个子控件占一帧,这些帧会一个一个叠加在一起,后加入的控件会叠加在上一个控件上层。因此也可以将 FrameLayout 称为堆栈布局,或框架布局。常用属性:

属性 描述
android:foreground 帧容器的前景布局,前景图像永远处于帧布局最上面,不会被覆盖
android:foregroundGravity 前景图像显示位置

RelativeLayout(约束布局)

约束布局是 Android Studio2.2 新添加的布局。 它适合使用可视化的方式编写界面布局,优点是减少嵌套,优化布局,可以直接拖拽的方式布局;缺点也显而易见,修改的时候容易错乱,代码可读性变差。不推荐使用,这里不过多描述。

参考文章:

Android.view.View 类全貌【思维导图】

[越努力,越幸运!]