Android界面布局
Android提供了布局管理器来管理Android应用的用户界面里的各组件。通常推荐使用布局管理器来管理组件的分布、大小,而不是直接设置位置和大小。为了让组件在不同分辨率的手机屏幕上都能运行,布局管理器可以根据运行平台来调整组件的大小。我们要做的只是为容器选择适合的布局管理器就OK啦!
【1】线性布局( LinearLayout )
线性布局线性布局是一种让视图水平或垂直线性排列的布局,线性布局使用<LinearLayout>标签进行配置。LinearLayout会将容器里面的组件一个挨着一个地排列起来,还可以通过设置 android:orientation 属性 控制各组件的横向或者纵行排列。
注意的是线性布局它不会自动换行,当组件排列到最后,剩下的组件将不会显示出来。
LinearLayout的一些常用的属性和方法:
android:baselineAligned –> setBaselineAligned(boolean)
[该属性设置为false,将会阻止该布局管理器与他的子元素的基线对齐]android:divider –> setDividerDrawable(Drawable)
[设置垂直布局时两个按钮之间的分隔条]android:gravity –> setGrsvity(int)
[设置布局管理器内组件的对齐方式。也可以同时指定多种对齐方式的组合,例如 left|center_vertical
代表出现在屏幕左边且垂直居中]android:measureWithLargestChild –>
setMeasureWithLargestChildEnable(boolean)
[当该属性设置为true时,所有带权重的子元素都会具体有最大子元素的最小尺寸]android:orientation –>
[设置布局管理器内组件的排列方式。vertical(垂直,默认值),horizontal(水平)]android:layout_gravity –> [指定该子元素在 LinearLayout 中的对齐方式]
android:layout_weight –> [指定该子元素在 LinearLayout 中所占的权重]
【2】相对布局( RelativeLayout)
在RelativeLayout容器中,其子元素可以使用彼此之间的相对位置或者与容器之间的相对位置进行定位。如果A组件的位置是由B组件的位置来决定的,必须先定义B组件再定义A组件。
RelativeLayout的一些常用的属性和方法:
android:gravity –> setGravity(int) [设置该布局容器内子组件的对齐方式]
android:ignoreGravity –> setIgnoreGravity(int) [设置哪个组件不受 gravity
属性影响]【以下属性只能设置boolean值】 android:layout_centerHorizontal [水平居中] android:layout_centerVertical [垂直居中] android:layout_centerInParent [中央位置] android:layout_alignParentBottom [底端对齐] android:layout_alignParentLeft [左边对齐] android:layout_alignParentRight [右边对齐] android:layout_alignParentTop [顶端对齐] 【当已定义A组件,设置B组件的位置】 android:layout_toRightOf [B组件位于A组件右侧] android:layout_toLeftOf [B组件位于A组件左侧] android:layout_above [B组件位于A组件上方] android:layout_below [B组件位于A组件下方] android:layout_alignTop [控制B组件与A组件上边界对齐] android:layout_alignBottom [控制B组件与A组件下边界对齐] android:layout_alignLeft [控制B组件与A组件左边界对齐] android:layout_alignRight [控制B组件与A组件右边界对齐]
【3】表格布局( TableLayout)
表格布局是一种行列方式排列视图的布局,使用<TableLayout>和<TableRow>标签进行配置。表格布局采用行列的形式来管理组件,不需要明确声明多少行多少列,而是直接通过添加TableRow、其他组件来控制行数和列数。
在表格布局中列的宽度由该列中最宽的单元格决定,整个表格布局的宽度默认是占满父容器的。
设置单元格的三种方式:
Shrinkable: 被设置为Shrinkable的列的的所有的单元格的宽度可以被收缩,以保证该表格能够适应父容器的宽度。
Collapsed: 被设置为Collapsed的列的的所有的单元格会被隐藏。
Stretchable: 被设置为Stretchable的列的的所有的单元格的宽度可以被拉伸,以保证组件能够完全填满表格空余空间。
TableLayout的一些常用的属性和方法:
因为TableLayout继承了LinearLayout,所以支持LinearLayout的所有XML属性。而且还支持以下属性和方法:
android:shrinkColumns --> setshrinkAllColumns(boolean) [设置允许被收缩的列的序号]
android:collapseColumns --> setColumnCollapsed(int,boolean) [设置需要被隐藏的列的序号]
android:layout_column --> setStretchAllColumns(boolean) [设置允许被拉伸的列的序号]
注意:列通过从0开始的索引值表示,多个序列号之间用逗号隔开。
【4】帧布局( FrameLayout)
帧布局是一种把视图层叠起来显示的布局,使用<FrameLayout>标签进行配置。帧布局容器为每个加入其中的组件创建一个空白的区域,每个子组件占据一帧,每一帧都会根据 gravity 属性执行自动对齐,把组件一个个地叠加在一起。
FrameLayout的一些常用的属性和方法:
android:foreground --> setForeground(Drawable) [设置帧布局容器的前景图像]
android:foregroundGravity --> setForegroundGravity [定义回执前景图像的gravity属性]
【5】网格布局( GridLayout)
网格布局是类似于HTML中table的布局,使用<GridLayout>标签进行配置。网格布局把整个容器分成 行×列 个网格,每个网格中可以防止一个组件。也可以设置一个组件横跨多少列或者多少行。可以使用setRowCount(int)和setColumnCount(int)方法来控制该网格的行列数量。
FrameLayout的一些常用的属性和方法:
- android:alignmentMode –> setAlignmentMode(int) [设置布局采用的对齐方式]
- android:colimnCount –> setColumnCoint(int) [设置网格的列数]
- android:columnOrderPreserved –> setColumnOrderPreserved(boolean)
[设置网格容器是否保留列序号] - android:rowCount –> setRowCount(int) [设置网格的行数]
- android:rowOrderPresreved –> setRowOrderPreserved(boolean)
[设置网格容器是否保留行序号] android:useDefaultMargins –> setUseDefaultMargins(boolean)
[设置网布局管理器是否使用默认的页边距]android:layout_gravity –> setGravity [设置子组件采用哪种方式占据该网格的空间]
- android:layout_column [设置该子组件在 GridLayout 的第几列]
- android:layout_row [设置该子组件在 GridLayout 的第几行]
- android:layout_columnSpan [设置该子组件在 GridLayout 横跨几列]
- android:layout_rowSpan [设置该子组件在 GridLayout 横跨几行]
【6】绝对布局( AbsoluteLayout)
绝对布局是通过X坐标和Y坐标来控制组件的位置的,使用<AbsoluteLayout>标签进行配置。
AbsoluteLayout的属性:
android:layout_x [指定子视图的x轴坐标]
android:layout_y [指定子视图的y轴坐标]
android:layout_width [指定子视图的宽度]
android:layout_height [指定子视图的高度]
由于Android手机的屏幕大小、分辨率存在较大的差异,所以不推荐使用绝对布局。