2024年3月9日发(作者:)

Android Layout 之 RelativeLayout,代码实现相对布局

作者:喜之郎

常年担任java开发小组负责人

使用 AbsoluteLayout 可以直接指定其子 View 的绝对位置, 这种布局方式虽然简

单,但是不够灵活。比如在一个程序中,按钮2 位于 按钮1 的下方且和 按钮1 左对齐,

我们可以使用指定两个按钮的绝对位置的方式布局,但是当布局完成后,由于某些原因,

这两个按钮需要相左平移一些距离以便在父 View 右边留出一些空白区域,那么我们就需

要同时修改 按钮1 和 按钮2 的 layout params。如果布局更复杂一些呢?这样“牵一

发而动全身”的布局模式恐怕不是那么友好吧?

RelativeLayout,顾名思义,就是以“相对”位置/对齐 为基础的布局方式。

veLayout 有个 继承自Params

的内嵌类 LayoutParams,使用这个类的实例调用 w 就可以实现

“相对布局”。

Params 有一个构造函数:

Params(int w, int h),参数指定了子 View 的宽度和高度,这一

点和其父类是一样的。而实现相对布局的关键在它的 两个 addRule 方法上。anchor 参

数指定可以是 View 的 id(“相对于谁”)、(启用某种对齐方式) 或

者 是-1(应用于某些不需要 anchor 的 verb);AddRule 方法的 verb 参数指定相对的

“动作”(以下常量均定义于 veLayout中,为了简便不给出其全

名):

ALIGN_BOTTOM、ALIGN_LEFT、 ALIGN_RIGHT、 ALIGN_TOP: 本 View 的 底

边/左边/右边/顶边 和 anchor 指定的 View 的 底边/左边/右边/顶边 对齐。

ALIGN_WITH_PARENT_BOTTOM 、ALIGN_WITH_PARENT_LEFT 、

ALIGN_WITH_PARENT_RIGHT 、 ALIGN_WITH_PARENT_TOP : 和上面一组常量类

似,只不过不需要再指定 anchor, 其 anchor 自动为 Parent View。

CENTER_HORIZONTAL、CENTER_IN_PARENT 、CENTER_VERTICAL : 如果

anchor 为 TRUE,在 Parent 中 水平居中/水平和垂直均居中/垂直居中。

POSITION_ABOVE 、POSITION_BELOW 、 POSITION_TO_LEFT 、

POSITION_TO_RIGHT : 本 View 位于 anchor 指定的 View 的 上边/下边/左边/右

边。

看一个例子:

package ;

import ty;

import ;

import .*;

import .*;