六大布局方式
这是我参与「第四届青训营 」笔记创作活动的第2天
接下来介绍6种常见的布局方式
可以通过以下两种方式声明布局方式:
-
使用 XML 文件;
-
在 Java 代码中通过调用方法进行控制;
尽量使用 XML 文件声明,因为
- 将程序 表现层 和 控制层 分离
- 在后期修改用户界面时, 无需更改程序的源程序
- 可通过WYSIWYG可视化工具直接看到所涉及的用户界面,有利于加快开发过程。
- 在程序运行时动态添加界面布局会大大降低应用响应速度
LinearLayout 线性布局
LinearLayout容器中的组件一个挨着排列。
自身属性
| XML属性 | 相关方法 | 说明 |
|---|---|---|
| android:gravity | setGravity(int) | 设置布局管理器内组件的对齐方式 |
| android:orientation | setOrientation(int) | 设置布局管理器内组件的排列方式,可以设置为horizontal、vertical两个值之一 |
其中,gravity支持:top、left、right、center_vertical、 fill_vertical等参数和其组合。
LinearLayout子元素支持的常用XML属性及方法
| XML属性 | 说明 |
|---|---|
| android:layout_gravity | 指定该子元素在LinearLayout中的对齐方式 |
| android:layout_weight | 指定子元素在LinearLayout中所占的权重 |
TableLayout 表格布局
TableLayout继承自Linearlayout,本质上还是线性布局。
TableLayout采用行、列的形式来管理UI组件。
通过添加TableRow、在RableRow里添加组件来设置行、列。(若直接在TableLayout添加组件,会单独占一行)
单元格设置
-
Shrinkable:该列所有单元格的宽度可以被收缩,以保证该表格能适应父容器的宽度
-
Strentchable:该列所有单元格的宽度可以被拉伸,以保证该组件能完全填满表格的空余空间
-
Collapsed:如果该列被设置为Collapsed,那么该列的所有单元格会被异常
自身属性
XML属性 相关方法 说明 android:collapseColumns setColumns(int, boolean) 设置需要被隐藏的列的序号,多个序号间用逗号分隔 android:shrinkColumns setShrinkAllColumns(boolean) 设置需要被收缩的列的序号 android:stretchColumns setStretchAllColumns(boolean) 设置允许被拉伸的列的序号
FrameLayout 帧布局
直接继承自ViewGroup组件
帧布局为每一个加入其中的组件创建一个空白的区域(称为一帧),每个子组件占据一帧。
这些帧会根据gravity属性执行自动对齐。
自身属性
| XML属性 | 相关方法 | 说明 |
|---|---|---|
| android:foreground | setForeground(Drawable) | 设置该帧布局容器的前景图像 |
| android:foregroundGravity | setForeGroundGraity(int) | 定义绘制前景图像的gravity属性 |
RelativeLayout 相对布局
自身属性
内部类
控制各子组件的布局分布,提供了一个内部类RelativeLayout.layoutParams.
GridLayout 网格布局
Android4.0后新增的网格布局空间
和TableLayout有点像,通过吧整个网格划分为rows X columns各网格,每个网格可以放一个组件。
性能和功能比TableLayout好
具体表现在:
-
GridLayout布局中单元格可以跨越多行,而TableLayout不行。
-
渲染速度也比TableLayout快。
自身属性
内部类
为了控制GridLayout布局容器中各子组件的布局分布,提供了一个内部类GridLayout.LayoutParams,布局容器中子组件的布局分布
GridLayout.LayoutParams常用的XML属性和方法说明
AbsoluteLayout 绝对布局
不提供任务布局控制
开发人员用过X、Y坐标进行组件的控制。通过设置layout_x,layout_y指定以下两个XML属性。
已经过时,建议少用
注意点
- 建议:尽量减少布局嵌套、减少创建的View对象数量。
- 减少布局层次:通过RelativeLayout代替LinearLayout,减少嵌套
- 使用标签,合并布局
- 重用布局,在XML里面使用标签,通过指定android:layout属性来指定要包含的另外一个XML布局。