本节主要介绍的是:以ViewGroup为基类派生的布局管理器

下面显示了android布局管理器的类图:

Android 布局编辑器打开 android布局管理器_Android 布局编辑器打开

android应用的图形用户界面具有良好的平台无关性,就是使用布局管理器来管理组件的分布、大小,而不是直接设置组件的位置和大小。

1、LinearLayout类(线性布局):

可以将容器里的组件一个挨一个地排列起来,LinearLayout可以控制各组件的排列方式(横向或者纵向)。

下面显示了LinearLayout支持的XML属性以及相关的方法:

Android 布局编辑器打开 android布局管理器_android_02

LinearLayout包含的子元素都受LinearLayout.LayoutParams控制,

LinearLayout.LayoutParams子元素支持的常用XML属性及相关方法:

Android 布局编辑器打开 android布局管理器_android_03


2、TableLayout类(表格布局):

TableLayout继承了LinearLayout,它的本质还是线性布局管理器,TableLayout采用行、列的形式来管理UI组件,TableLayout并不需要明确包含多少行、多少列,而使通过添加TableRow等其他组件来控制表格的行数和列数。

在表格布局中,列的宽度由该列中最宽的那个单元格决定,整个表格的布局宽度则取决于父容器的宽度(默认情况下是占满父容器本身)

在TableLayout中,可以设置单元格如下行为方式:

Shrinkable:某列被设置为Shrinkable,该列的所有单元格的宽度可以被收缩,以保证表格能够适应父容器的宽度。

Stretchable:某列被设置为Stretchable,该列的所有单元格宽度可以被拉伸,保证组件能完全填满表格空余空间。

Collapsed:某列被设置为Collapsed,该列的所有单元格会被隐藏。

TableLayout继承了LinearLayout,它完成可以支持LinearLayout所支持的全部XML属性,除此之外,TableLayout支持如下属性:

Android 布局编辑器打开 android布局管理器_XML_04

对于列序号,我们通常从0开始,0代表第一列,1代表第2列,依次下去。。。


3、FrameLayout类(帧布局):

从开始的布局管理器类图可以知道,FrameLayout直接继承于ViewGroup。

FrameLayout为每个加入其中的组件创建一个空白的区域,每个子组件占据一帧,这些帧会根据gravity属性执行自动对齐。

FrameLayout常用的XML属性及向光方法:

Android 布局编辑器打开 android布局管理器_XML_05

FrameLayout包含的子元素也受FrameLayout.LayoutParams控制,博客中给出了FrameLayout的对应“霓虹灯效果”的例子。


4、RelativeLayout类(相对布局):

相对布局容器内子组件的位置总是相对兄弟组件、父容器来决定的,这种布局方式称为相对布局。

例:A组件的位置是由B组件的位置来决定的,则要求先定义B组件的位置,再定义A组件。

RelativeLayout支持的XML属性如下:

Android 布局编辑器打开 android布局管理器_XML_06

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

下面是RelativeLayout.LayoutParams设置为true、false的XML属性

Android 布局编辑器打开 android布局管理器_XML_07

下面是RelativeLayout.LayoutParams设置为其他UI组件ID的属性:

Android 布局编辑器打开 android布局管理器_Android 布局编辑器打开_08

Android 布局编辑器打开 android布局管理器_Android 布局编辑器打开_09


除此之外,RelativeLayout.LayoutParams还继承了android.view.ViewGroup.MarginLayoutParams,则RelativeLayout布局容器中每个子组件可以指定为android.view.ViewGroup.MarginLayoutParams所支持的XML属性。


5、GridLayout类(网格布局):

这是android4.0新增的布局管理器,需要在android4.0之后的版本中才可以使用。

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

下面列出了GridLayout常用的XML属性以及相关的方法:

Android 布局编辑器打开 android布局管理器_android_10

为了控制GridLayout布局容器中各子组件的布局分布,GridLayout提供了一个内部类:GridLayout.LayoutParams,该类提供了一些XML属性来控制GridLayout布局容器中子组件的布局分布:

Android 布局编辑器打开 android布局管理器_布局容器_11


6、AbsoluteLayout类(绝对布局):

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

使用绝对布局的XML属性:

layout_x:指定该组件的X坐标

layout_y:指定该组件的Y坐标

AbsoluteLayout不是一个好思路,因为运行android程序的手机千差万别,各种参数和性能都不同,AbsoluteLayout很难兼顾不同屏幕大小和分辨率的问题,所以AbsoluteLayout已经过时。

下面介绍一下android中常用的距离单位:

Android 布局编辑器打开 android布局管理器_android_12