Android 布局管理器

本文内容

  • 环境
  • 项目结构
  • 线性布局
  • 表格布局
  • 帧布局
  • 相对布局
  • 网格布局
  • 绝对布局
  • 修改记录

最近自己写 Andorid APP,又遇到画界面的事啦,搞后台的,看见画界面就头疼,但是看来不研究一下不行啦~至少 Andorid 界面比 Web 界面简单得多,自己试试那些属性就行~

下载 Demo

环境


  • Windows 2008 R2 64 位
  • Eclipse ADT V22.6.2,Android 4.4.2(API 19)
  • SAMSUNG GT-8618,3.5英寸屏(7.5x5 cm,苹果大小一样),Android OS 4.1.2

 

项目结构


01

图 1.1 项目结构                                                                     图 1.2 主程序

 

线性布局


LinearLayout 布局会将容器里的组件一个挨一个地排列起来。LinearLayout 可以控制各个组件横向排列(通过 android:orentation 属性),也可以纵向排列。

LinearLayout 布局不会换行,当组件一个挨着一个地排列到头之后,剩下的组件将不会被显示。

2

图 2 线性布局

说明:页面上有 3 个 TextView 和 15 个 Button。最外层是 android:orientation="vertical" 垂直布局;其中,在内部,按钮 1~10 采用 android:orientation="horizontal" 水平布局,但只有按钮 1~5 显示出来,按钮 11~15 也采用垂直布局,并设置 android:gravity="bottom|center_horizontal" 属性,即底部、水平居中。

表 1 LinearLayout 常见 XML 属性

XML 属性

说明

android:baselineAligned 该属性设置为 false,将会阻止该布局管理器与它的子元素的基线对齐
android:divider 设置布局时两个按钮之间的分割条
android:gravity 设置布局管理器内组件的对齐方式。如 topleftcenter_vertical 等,也可以同时指定多种对齐方式的组合,如 left|center_vertical,表示屏幕左边、垂直居中
android:measureWithLargestChild 当属性为 true 时,所有带权重的子元素都会具有最大子元素的最小尺寸
android:orientation 设置布局管理器内组件的排列方式,可设置为 horizontalvertical 中的一个
android:layout_gravity 指定该子元素在 LinearLayout 中的对齐方式
android:layout_weight 指定该子元素在 LinearLayout  中所占的权重

与属性对应的方法,略,都是以 set*** 开头,很容易辨认。下同。

 

表格布局


TableLayout 布局采用行、列形式管理组件,它并不需要明确地声明有多少行、多少列,而是通过添加 TableRow、其它组件来控制表格的行数和列数。

TableLayout 继承了 LinearLayout,因此本质上依然是线性布局管理器。

34

图 3-1 表格布局                                                         图 3-2 表格布局

表 2 TableLayout 常用 XML 属性

XML 属性

说明

android:collapseColumns 设置需要被隐藏的列的列序号。多个列序号之间用逗号分隔
android:shrinkColumns 设置允许被收缩的列的列序号。多个列序号之间用逗号分隔
android:stretchColumns 设置允许被拉伸的列的列序号。多个列序号之间用逗号分隔

 

帧布局


FrameLayout 布局为每个加入其中的组件创建一个空白区域(称为一帧),每个子组件占一帧,这些帧都会根据 gravity 属性执行自动对齐。帧布局的效果有点类似与 AWT 的 CardLayout,都是把组件一个一个地叠加在一起。

这种布局的使用场景是,如果你自定义多个 Fragment,不同的情况或不同的点击,需要显示不同的 Fragment(用新的 Fragment 替换到之前的),那就可以使用该布局。

7

图 4 帧布局 - 霓虹灯

表 3 FrameLayout 常用 XML 属性

XML 属性

说明

android:foreground 设置该帧布局容器的前景图像
android:foregroundGravity 定义绘制前景图像的 gravity 属性

 

相对布局


RelativeLayout 布局内子组件的位置总是相对兄弟组件、父容器来决定的,因此才称为相对布局。

如果 A 组件的位置是由 B 组件的位置来决定的,Android 要求先定义 B 组件,再定义 A 组件。

56

图 5-1 相对布局                                                         图 5-2 相对布局 - 梅花

表 4.1 RelativeLayout XML 属性

XML 属性

说明

android:gravity 设置该布局容器内各个子组件的对齐方式
android:ignoreGravity 设置哪个组件不受 gravity 属性的影响

为了控制该布局容器内各子组件的布局,RelativeLayout 提供了一个内部类:RelativeLayout.LayoutParams,该类提供了大量的 XML 属性来控制 RelativeLayout 内子组件的布局。

表 4.2 RelativeLayout.LayoutParams 里只能设置为 boolean 值的属性

XML 属性

说明

android:layout_centerHorizontal 控制该子组件是否位于布局容器的水平居中
android:layout_centerVertical 控制该子组件是否位于布局容器的垂直居中
android:layout_centerInParent 控制该子组件是否位于布局容器的中间位置
android:layout_alignParentBottom 控制该子组件是否与布局容器的底端对齐
android:layout_alignParentLeft 控制该子组件是否与布局容器的左边对齐
android:layout_alignParentRight 控制该子组件是否与布局容器的右边对齐
android:layout_alignParentTop 控制该子组件是否与布局容器的顶端对齐

表 4.3 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 组件的右边界对齐

 

网格布局


GridLayout 布局是 Android 4.0 新增的布局管理器。在此之前,如果想要达到网格效果,最常见的是使用 LinearLayout 布局,其次可以使用 TabelLayout 布局,但都存在问题,反正现在已经解决,究竟是什么问题,就不再多说了。

GridLayout 的作用类似 HTML 的 table 标签,它把整个容器划分成行×列个网格,每个网格可以放置一个组件。此外,也可以设置一个组件横跨多少列、一个组件纵跨多少行。

11001

图 6 网格布局 - 计算器

说明:左边是通过标记方式;右边是通过后台方式。

表 5 GridLayout XML 属性

XML 属性

说明

android:alignmentMode 设置该布局管理器采用的对齐模式
android:columnCount 设置该网格的列数量
android:columnOrderPreserved 设置该网格容器是否保留列序号
android:rowCount 设置该网格的行数量
android:rowOrderPreserved 设置该网格容器是否保留行序号
android:useDefaultMargins 设置该布局管理器是否使用默认的页边距

 

绝对布局


AbsoluteLayout 布局不提供任何布局控制,而是由开发人员自己通过 X 坐标、Y 坐标来控制组件的位置。当使用 AbsoluteLayout 布局时,布局容器不再管理子组件的位置、大小——这些都需要开发人员自己控制。 

89

图 7-1 绝对布局                                                         图 7-2 绝对布局

注意:鉴于此,AbsoluteLayout 布局已经过时。运行 Android 应用的手机往往千差万别,因此屏幕大小、分别率都可能存在较大差异,使用绝对布局会很难兼顾不同屏幕大小、分辨率的问题。

 

修改记录


  • 2015-2-4 【UPDATE】帧布局

 

下载 Demo

posted @ 2014-08-20 08:36  船长&CAP  阅读(893)  评论(2编辑  收藏  举报
免费流量统计软件