六大布局方式 | 青训营笔记

188 阅读3分钟

六大布局方式

这是我参与「第四届青训营 」笔记创作活动的第2天

接下来介绍6种常见的布局方式

​ 可以通过以下两种方式声明布局方式:

  1. 使用 XML 文件;

  2. 在 Java 代码中通过调用方法进行控制;

    尽量使用 XML 文件声明,因为

    1. 将程序 表现层 和 控制层 分离
    2. 在后期修改用户界面时, 无需更改程序的源程序
    3. 可通过WYSIWYG可视化工具直接看到所涉及的用户界面,有利于加快开发过程。
    4. 在程序运行时动态添加界面布局会大大降低应用响应速度

LinearLayout 线性布局

​ LinearLayout容器中的组件一个挨着排列。

自身属性

XML属性相关方法说明
android:gravitysetGravity(int)设置布局管理器内组件的对齐方式
android:orientationsetOrientation(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:collapseColumnssetColumns(int, boolean)设置需要被隐藏的列的序号,多个序号间用逗号分隔
    android:shrinkColumnssetShrinkAllColumns(boolean)设置需要被收缩的列的序号
    android:stretchColumnssetStretchAllColumns(boolean)设置允许被拉伸的列的序号

FrameLayout 帧布局

​ 直接继承自ViewGroup组件

​ 帧布局为每一个加入其中的组件创建一个空白的区域(称为一帧),每个子组件占据一帧。

​ 这些帧会根据gravity属性执行自动对齐。

自身属性

XML属性相关方法说明
android:foregroundsetForeground(Drawable)设置该帧布局容器的前景图像
android:foregroundGravitysetForeGroundGraity(int)定义绘制前景图像的gravity属性

RelativeLayout 相对布局

自身属性

image-20220722000633200

内部类

​ 控制各子组件的布局分布,提供了一个内部类RelativeLayout.layoutParams.

image-20220722000848623

image-20220722000905660


GridLayout 网格布局

​ Android4.0后新增的网格布局空间

​ 和TableLayout有点像,通过吧整个网格划分为rows X columns各网格,每个网格可以放一个组件。

​ 性能和功能比TableLayout好

​ 具体表现在:

  1. GridLayout布局中单元格可以跨越多行,而TableLayout不行。

  2. 渲染速度也比TableLayout快。

    自身属性

    image-20220722000219821

    内部类

    为了控制GridLayout布局容器中各子组件的布局分布,提供了一个内部类GridLayout.LayoutParams,布局容器中子组件的布局分布

    GridLayout.LayoutParams常用的XML属性和方法说明

    image-20220722000454646


AbsoluteLayout 绝对布局

​ 不提供任务布局控制

​ 开发人员用过X、Y坐标进行组件的控制。通过设置layout_x,layout_y指定以下两个XML属性。

已经过时,建议少用

注意点

  1. 建议:尽量减少布局嵌套、减少创建的View对象数量。
    1. 减少布局层次:通过RelativeLayout代替LinearLayout,减少嵌套
    2. 使用标签,合并布局
    3. 重用布局,在XML里面使用标签,通过指定android:layout属性来指定要包含的另外一个XML布局。