为了更好的管理Android应用的用户界面的的各种组件,Android提供了布局管理器。通使用布局管理器,Android应用的图形用户界面具有良好的平台无关性。通过局管理器来管理自检的分布、大小,而不是直接设置组件的位置和大小。常用的布局管理器有线性布局、表格布局、帧布局、相对布局,绝对布局等。
1、线性布局
线性布局由LinearLayout类来代表,它们将容器里的组件一个挨着一个地排列起来。不仅可以控制各组件横向排列,也可控制各组件纵向排列。
LinearLayout的常用XML属性及相关方法的说明
XML属性 | 相关方法 | 说明 |
android:gravity | setGravity(int) | 设置布局管理器内组件的对齐方式。该属性支持top,bottom,left,right,center_certical, center_horizontal,fill_horizontal,center, fill,clip_vertical,clip_horizontal。也可以同时制定多种堆砌方式的组合,例如left|center_horizontal 代表出现在屏幕左边,而且垂直居中。竖线前后千万不能出现空格 |
android:orientation | setOrientation(int) | 设置布局管理器内组件的排列方式,可以设置为 horizontal(水平排列)、vertical(垂直排列、默认值)两个值的其中之一 |
LinearLayout布局示例:
结果如图:
注:上面定义了一个简单的线性布局管理器,并定义了两个按钮。代码第三行指定水平排列所有组件。第六行指定多有组件对齐到容器底部并且水平居中。
2.表格布局
表格布局由TableLayout所代表,表格布局采用行,列的形式来管理UI组件,TableLayout并不需要明确地声明包含多少行,列,而是通过添加TableRow,其他组件来控制表格的行数和列数。
每次想TableLayout中添加一个TableRow,该TableRow就是一个表格行,TableRow也是容器,因此它可以不断地添加其他组件,每添加一个子组件该表格就增加一列。
TableLayout的常用XML属性及相关方法的说明
XML属性 | 相关方法 | 说明 |
android:collapseColumns | setColumnCollapsed(int,boolean) | 设置需要被隐藏的列的列序号,多个列序号之间用逗号隔开 |
android:shrinkColumns | setShrinkAkllColumns(boolean) | 设置允许被收缩的列的列序号,多个列序号之间用逗号隔开 |
android:stretchColumns | setStretchAllColumns(boolean) | 设置允许被拉伸的列的列序号,多个列序号之间用逗号隔开 |
TableLayout应用示例:
运行结果:
3.帧布局
帧布局由FrameLayout所代表,帧布局容器为每个加入其中的组件创建一个空白的区域(成为一帧),所有每个子组件占据一帧,这些帧都会根据gravity属性执行自动对齐。也就是说,把组件一个一个的叠加在一起。
FrameLayout的常用XML属性及相关方法的说明
XML属性 | 相关方法 | 说明 |
android:foreground | setForeground(Drawable) | 设置该帧布局容器的前景图像 |
android:foregroundGravity |
FrameLayout应用示例:
4.相对布局
相对布局由RelativeLayout代表,相对布局容器内子组件的位置总是相对兄弟组件、父容器来决定的,因此这种布局方式被称为相对布局。
如果A组件的位置是由B组件的位置来决定的,Android要求先定义B组件,再顶定义A组件。
RelativeLayout的XML属性及相关方法说明
XML属性 | 相关方法 | 说明 |
android:gravity | setGravity(int) | 设置该布局容器内部各子组件的对齐方式 |
android:ignoreGravity | setIgnoreGravity(int) | 设置哪个组件不受gravity组件的影响 |
RelativeLayout.LayoutParams里只能设为boolean值得属性
属性 | 说明 |
android:layout_centerHorizontal | 控制该子组件是否位于布局容器的水平居中位置 |
android:layout_centerVertical | 控制该子组件是否位于布局容器的垂直居中位置 |
android:layout_Inparent | 控制该子组件是否位于布局容器的中央位置 |
android:layout_alignParentBottom | 控制该子组件是否位于布局容器低端对齐 |
android:layout_alignParentLeft | 控制该子组件是否位于布局容器左边对齐 |
android:layout_alignParentRight | 控制该子组件是否位于布局容器右边对齐 |
android:layout_alignParentTop | 控制该子组件是否位于布局容器顶端对齐 |
RelativeLayout.LayoutParams里只能设为其他UI组件ID的属性
XML属性 | 说明 |
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组件的右边界对齐 |
RelativeLayoutTest应用示例:
运行结果:
.5、绝对布局
绝对布局由AbsoluteLayout代表,Android不提供如何布局控制,而是由开发人员自己通过X坐标,Y坐标来控制组件的位置。
XML属性说明
XML属性 | 说明 |
android:layout_x | 指定该子组件的X坐标 |
android:layout_y | 指定该子组件的Y坐标 |
Android中一般支持以下常用的距离单位
px(像素):每个px对应屏幕上的一个点。
dip或dp(device independent pixels,设备独立像素):一种及与屏幕密度的抽象单位。 在每英寸160点的显示器上,1dip=1px,但随着屏幕密度的改变,dip与px的换算会发生改变。
sp(scaled pixels,比例像素):主要处理字体的大小,可以根据用户的字体大小首选项进行缩放
in(英寸):标准长度单位
mm(毫米):标准长度单位
pt(磅):标准长度单位,1/72英寸
AbsoluteLayout应用示例:
运行结果: