手记

Android各布局详解xml属性

一.线性布局
线性布局有LinearLayout类来代表。
LinearLayout可以控制各组件横向排列(通过设置android:orientation控制),也可以控制各组件纵向排列。
Android 的线性布局不会换行,当组件一个挨着一个的排列到头后,剩下的组件将不会显示出来

LinearLayout的常用XML属性及其说明

android:baselineAligned //该属性设为false,将会阻止该布局管理器与它的子元素的基线对其。
android:divider //设置垂直布局时俩个按钮之间的分隔条。
android:gravity //设置布局管理器内组件的对齐方式。该属性支持top、button、letf、right、center_horizontal、fill_horizontal、center、fill、clip_vertical、clip_horizontal几个属性值。也可以同时指定多种对齐方式的组合,例如 leftcenter_vertical 代表出现在屏幕左边,而且垂直居中。
android:measureWithLargestChild //当该属性设为 true 时,所有带权重的子元素都会具有最大子元素的最小尺寸
android:orientation //设置布局管理器内组件的排列方式,可以设置为 horizontal (水平布局)、vertical(垂直布局、默认值)两个值之一。

LinearLayout包含的所有子元素都受LinearLayout.LayoutParams 控制,因此 LinearLayout包含的值还可以额外制定下面属性。

android:layout_gravity //指定该子元素在LinearLayout 中的对齐方式。
android:layout_weight //指定该子元素在LinearLayout 中所占的权重。

二.表格布局
表格布局有 TableLayout 代表, TableLayout 继承了 LinearLayout,因此本质依然是线性布局。 TableLayout 并不需要明确的声明多少行、多少列,而是用过添加 TableRow 、其他组件来控制表格的行数和列数。
每次向 TableLayout 中添加一个 TableRow,该 TableRow 就是一个表格行,TableRow 也是容器,因此它也可以不断添加其他组件,每添加一个子组件该表格就增加一列。
如果直接向 TableLayout 中添加组件,那么这个组件将直接占用一行。
在表格布局中,列的宽度由该列中最宽的那个单元格决定,整个表格布局的宽度则取决于父容器的宽度(默认总是占满父容器本身)。

在表格布局中,可以为单元格设置下列三种行为。

Shrinkable:如果某个列被设为 Shrinkable,那么该列的所有单元格的宽度可以被收缩,以保证该表格能适应父容器的宽度
Stretchable:如果某个列被设为 Stretchable,那么该列的所有单元格的宽度可以被拉伸,以保证组件能完全填满空余空间
Collapsed:如果某个列被设为 Collapsed,那么该列的所有单元格会被隐藏。

TableLayout 继承了 LinearLayout ,因此它完全可以支持 LinearLayout 所支持的全部XML属性,除此之外还支持下列属性。

android:collapseColumns //设置需要被隐藏的列的列序号。多个列序号之间用逗号隔开
android:shrinkColumns //设置需要被收缩的列的列序号。多个列序号之间用逗号隔开
android:StretchColumns //设置需要被拉伸的列的列序号。多个列序号之间用逗号隔开

三.帧布局
帧布局由FrameLayout 表示。帧布局为每个组件创建一个空白的区域(称为一帧),每个子组件占据一帧,这些帧都会根据 gravity 属性执行自动对齐。

FrameLayout 常用XML属性

android:foreground //设置帧布局的前景图像
android:forgroundGravity //定义绘制前景图像的 gravity 属性

FrameLayout 包含的子元素也受 FrameLayout.LayoutParams 控制,因此它所包含的子元素也可指定android:layout_gravity属性。

四.相对布局
相对布局由RelativeLayout 表示,相对布局内子组件的位置总是相对兄弟组件、父容器来决定的。

RelativeLayout的XML属性

android:gravity //设置各子组件的对齐方式
android:ignoreGravity //设置哪个组件不受 gravity 属性影响

RelativeLayout只能设置为boolean值的属性

android:layout_centerHorizontal //子类控件是否位于父类容器的水平居中
android:layout_centerVertical //子类控件是否位于父类容器的垂直居中
android:layout_centerInParent //子类控件是否位于父类容器的中央位置
android:layout_alignParentBottom //子类控件是否与父容器底端对齐
android:layout_alignParentLeft //子类控件是否与父容器左对齐
android:layout_alignParentRight //子类控件是否与父容器右对齐
android:layout_alignParentTop //子类控件是否与父容器顶部对齐

 RelativeLayout只能设为其他组件ID的属性

android:layout_toRightOf //控制该子组件位于给出ID组件的右侧
android:layout_toLeftOf //控制该子组件位于给出ID组件的左侧
android:layout_above //控制该子组件位于给出ID组件的上方
android:layout_below //控制该子组件位于给出ID组件的下方
android:layout_alignTop //控制该子组件位于给出ID组件的上边界对齐
android:layout_alignBottom //控制该子组件位于给出ID组件的下边界对齐
android:layout_alignLeft //控制该子组件位于给出ID组件的左边界对齐
android:layout_alignRight //控制该子组件位于给出ID组件的右边界对齐

五.网格布局(后续补上)

六.绝对布局(后续补上)

1人推荐
随时随地看视频
慕课网APP