返回介绍

RelativeLayout

发布于 2025-03-09 17:00:31 字数 9045 浏览 0 评论 0 收藏 0

RelativeLayout

版本:Android 2.3 r1

结构

继承关系

public class RelativeLayout extends ViewGroup

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.RelativeLayout

子类及间接子类

直接子类

DialerFilter, TwoLineListItem

类概述

RelativeLayout 顾名思义,相对布局,在这个容器内部的子元素们可以使用彼此之间的相对位置或者和容器间的相对位置来进行定位。

注意,不能在 RelativeLayout 容器本身和他的子元素之间产生循环依赖,比如说,不能将 RelativeLayout 的高设置成为 WRAP_CONTENT 的时候将子元素的高设置成为 ALIGN_PARENT_BOTTOM

(译者注:这点额外要注意,当然这也很好理解,如果容器是不定高的,那么子元素当然无法对齐容器的底边^_^)。

可以参考官方 SDK 中的 RelativeLayout 教学贴 Relative Layout tutorial

常量

数据类型常量名称描述
intABOVE定义将元素的底边对齐另一个元素的顶边
intALIGN_BASELINE定义将元素基线的对齐另一个元素的基线
intALIGN_BOTTOM定义将元素底边的对齐另一个元素的底边
intALIGN_LEFT定义将元素的左边对齐另一个元素的左边
intALIGN_PARENT_BOTTOM定义将元素的底边对齐其父容器(RelativeLayout) 的底边
intALIGN_PARENT_LEFT定义将元素的左边对齐其父容器(RelativeLayout) 的左边
intALIGN_PARENT_RIGHT定义将元素的右边对齐其父容器(RelativeLayout) 的右边
intALIGN_PARENT_TOP定义将元素的顶边对齐其父容器(RelativeLayout) 的顶边
intALIGN_RIGHT定义将元素的右边对齐另一个元素的右边
intALIGN_TOP定义将元素的顶边对齐另一个元素的顶边
intBELOW定义将元素的顶边对齐另一个元素的底边
intCENTER_HORIZONTAL定义让元素在容器(RelativeLayout) 内水平居中
intCENTER_IN_PARENT定义让元素位于容器(RelativeLayout) 的中心
intCENTER_VERTICAL定义让元素在容器(RelativeLayout) 内垂直居中
intLEFT_OF定义将元素的右边对齐另一个元素的左边
intRIGHT_OF定义将元素的左边对齐另一个元素的右边
intTRUE 

内部类

Class RelativeLayout.LayoutParams

和 RelativeLayout 相关联的布局信息。

XML属性

属性名称描述
android:gravity设置容器中的内容该如何定位。对象本身的 x 和 y 轴。
android:ignoreGravity设置容器中的哪个子元素会不受 Gravity 的影响。

(译者注:接收参数:子元素的 Id,如果设置成为 0,则全部子元素都会受到影响)

公共方法

public boolean dispatchPopulateAccessibilityEvent (AccessibilityEvent event)

 分发 AccessibilityEvent 事件到该 View 的子视图中。

参数

event 事件本身。

返回值

如果事件分发完成,返回真。

public RelativeLayout.LayoutParams generateLayoutParams (AttributeSet attrs)

返回一个新的已设置属性集合的布局参数。

参数

attrs 构建 layout 布局参数的属性集合。

返回值

一个 RelativeLayout.LayoutParams 的实例或者他的一个子类

public int getBaseline ()

返回窗口空间的文本基准线到其顶边界的偏移量。如果这个部件不支持基准线对齐,这个方法返回-1。

返回值

基准线的偏移量,如果不支持基准线对齐则返回-1

public void requestLayout ()

当容器中的某个视图发生改变,会影响整个布局时,就调用这个方法,他会改变整个视图树的布局。

public void setGravity (int gravity)

描述子视图该如何摆放,默认值是 Gravity.LEFT | Gravity.TOP(译者注:说明 RelativeLayout 的元素如果不设置位置,会从左上角开始堆叠)。

参数

gravity 位置值,可以参考 Gravity

相关的 XML 属性

android:gravity

参见

setHorizontalGravity(int)

setVerticalGravity(int)

public void setHorizontalGravity (int horizontalGravity)

public void setVerticalGravity (int verticalGravity))

public void setIgnoreGravity (int viewId)

定义容器中的那个 VIew 会忽略容器设置的 Gravity,如果容器设置的 Gravity 是 Gravity.LEFT | Gravity.TOP 时,定义这个属性没有任何效果。

参数

viewId 将要忽略容器 Gravity 的视图的 id,设置为 0 则不会有任何 View 忽略 Gravity.

相关的 XML 属性

android:ignoreGravity

参见

setGravity(int)

受保护方法

protected boolean checkLayoutParams (ViewGroup.LayoutParams p)

(译者注:检测是不是 AbsoluteLayout.LayoutParams 的实例)

protected ViewGroup.LayoutParams generateDefaultLayoutParams ()

返回一组宽度为 WRAP_CONTENT,高度为 WRAP_CONTENT,坐标是(0,0)的布局参数。

返回值

一组默认的布局参数或 null 值。

protected ViewGroup.LayoutParams generateDefaultLayoutParams ( ViewGroup .LayoutParams p)

返回一组合法的受支持的布局参数。当一个 ViewGroup 传递一个布局参数没有通过 checkLayoutParams(android.view.ViewGroup.LayoutParams) 检测的视图时,此方法被调用。此方法会返回一组新的适合当前 ViewGroup 的布局参数,可能从指定的一组布局参数中复制适当的属性。

参数

p 被转换成一组适合当前 ViewGroup 的布局参数。

返回值

一个 ViewGroup.LayoutParams 的实例或者其中的一个子节点

protected void onLayout (boolean changed, int l, int t, int r, int b)

在此视图 view 给他的每一个子元素分配大小和位置时调用。 派生类可以重写此方法并且重新安排他们子类的布局。

参数

changed 这是当前视图 view 的一个新的大小或位置

l 相对于父节点的左边位置

t 相对于父节点的顶点位置

r 相对于父节点的右边位置

b 相对于父节点的底部位置

public void onMeasure (int widthMeasureSpec, int heightMeasureSpec)

测量视图以确定其内容宽度和高度。此方法被 measure(int, int) 调用。需要被子类重写以提供对其内容准确高效的测量。

约定:当重写此方法时,你必须调用 setMeasuredDimension(int, int) 来保存当前视图 view 的宽度和高度。不成功调用此方法将会导致一个 IllegalStateException 异常,是由 measure(int, int) 抛出。所以调用父类的 onMeasure(int, int) 方法是必须的。

父类的实现是以背景大小为默认大小,除非 MeasureSpec(测量细则)允许更大的背景。子类可以重写 onMeasure(int,int) 以对其内容提供更佳的尺寸。

如果此方法被重写,那么子类的责任是确认测量高度和测量宽度要大于视图 view 的最小宽度和最小高度(getSuggestedMinimumHeight() and getSuggestedMinimumWidth()),使用这两个方法可以取得最小宽度和最小高度。

参数

widthMeasureSpec 强加于父节点的横向空间要求。要求是使用 View.MeasureSpec 进行编码。

heightMeasureSpec 强加于父节点的纵向空间要求。要求是使用 View.MeasureSpec 进行编码。

补充

文章精选

[Android 学习指南] 相对布局 RelativeLayout

Android RelativeLayout 属性

RelativeLayout 排版 _ 免寫程式 [blogspot]

示例代码

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent">

<TextView

android:id="@+id/label"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="Type here:"/>

<EditText

android:id="@+id/entry"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:background="@android:drawable/editbox_background"

android:layout_below="@id/label"/>

<Button

android:id="@+id/ok"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_below="@id/entry"

android:layout_alignParentRight="true"

android:layout_marginLeft="10dip"

android:text="OK" />

<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_toLeftOf="@id/ok"

android:layout_alignTop="@id/ok"

android:text="Cancel" />

</RelativeLayout>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文