Most visited

Recently visited

Added in API level 1

RelativeLayout

public class RelativeLayout
extends ViewGroup

java.lang.Object
   ↳ android.view.View
     ↳ android.view.ViewGroup
       ↳ android.widget.RelativeLayout
Known Direct Subclasses


一个布局,其中的孩子的位置可以描述为相互之间或父母。

请注意,您不能在RelativeLayout的大小和子级的位置之间存在循环依赖关系。 例如,您不能有一个RelativeLayout,其高度设置为WRAP_CONTENT并且子设置为ALIGN_PARENT_BOTTOM

注意:在平台版本17及更低版本中,RelativeLayout受测量错误影响,可能导致用不正确的MeasureSpec值测量子视图。 (有关更多详细信息,请参阅MeasureSpec.makeMeasureSpec )。当RelativeLayout容器放置在滚动容器(例如ScrollView或HorizontalScrollView)中时触发了此操作。 如果自定义视图没有配备正确测量MeasureSpec模式UNSPECIFIED放置在RelativeLayout中,则无论如何都会静默工作,因为RelativeLayout会传递非常大的AT_MOST MeasureSpec。

对于为了兼容性而在其清单的uses-sdk标记中设置android:targetSdkVersion="17"或更早版本的应用程序,此行为已被保留。 面向SDK版本18或更高版本的应用将收到正确的行为

请参阅 Relative Layout指南。

有关布局属性,请参阅 RelativeLayout.LayoutParams

Summary

Nested classes

class RelativeLayout.LayoutParams

与RelativeLayout相关联的每个孩子的布局信息。

XML attributes

android:gravity Specifies how an object should position its content, on both the X and Y axes, within its own bounds. 
android:ignoreGravity Indicates what view should not be affected by gravity. 

Inherited XML attributes

From class android.view.ViewGroup
From class android.view.View

Constants

int ABOVE

将孩子的底部边缘与另一个孩子的顶部边缘对齐的规则。

int ALIGN_BASELINE

将孩子的基线与另一孩子的基线对齐的规则。

int ALIGN_BOTTOM

将孩子的底部边缘与另一个孩子的底部边缘对齐的规则。

int ALIGN_END

将孩子的末端与另一个孩子的末端对齐的规则。

int ALIGN_LEFT

将孩子的左边缘与另一个孩子的左边缘对齐的规则。

int ALIGN_PARENT_BOTTOM

将孩子的底边与RelativeLayout父亲的底边对齐的规则。

int ALIGN_PARENT_END

规则将孩子的结束边缘与其RelativeLayout父亲的结束边缘对齐。

int ALIGN_PARENT_LEFT

将孩子的左边缘与其RelativeLayout父亲的左边缘对齐的规则。

int ALIGN_PARENT_RIGHT

将孩子的右边缘与其RelativeLayout父亲的右边缘对齐的规则。

int ALIGN_PARENT_START

将孩子的起始边缘与其RelativeLayout父亲的起始边缘对齐的规则。

int ALIGN_PARENT_TOP

将孩子的顶边与RelativeLayout父亲的顶边对齐的规则。

int ALIGN_RIGHT

将孩子的右边缘与另一个孩子的右边缘对齐的规则。

int ALIGN_START

将孩子的起始边缘与另一个孩子的起始边缘对齐的规则。

int ALIGN_TOP

将孩子的上边缘与另一个孩子的上边缘对齐的规则。

int BELOW

将孩子的上边缘与另一个孩子的下边缘对齐的规则。

int CENTER_HORIZONTAL

相对于其RelativeLayout父级的边界水平居中的规则。

int CENTER_IN_PARENT

以孩子的RelativeLayout父母的界限为中心的规则。

int CENTER_VERTICAL

相对于其RelativeLayout父级的边界垂直居中的规则。

int END_OF

将孩子的起始边缘与另一个孩子的结束边缘对齐的规则。

int LEFT_OF

将孩子的右边缘与另一个孩子的左边缘对齐的规则。

int RIGHT_OF

将孩子的左边缘与另一个孩子的右边缘对齐的规则。

int START_OF

将孩子的最后边缘与另一个孩子的起始边缘对齐的规则。

int TRUE

Inherited constants

From class android.view.ViewGroup
From class android.view.View

Inherited fields

From class android.view.View

Public constructors

RelativeLayout(Context context)
RelativeLayout(Context context, AttributeSet attrs)
RelativeLayout(Context context, AttributeSet attrs, int defStyleAttr)
RelativeLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes)

Public methods

RelativeLayout.LayoutParams generateLayoutParams(AttributeSet attrs)

根据提供的属性集返回一组新的布局参数。

CharSequence getAccessibilityClassName()

返回此对象的类名称以用于辅助功能。

int getBaseline()

从小部件的顶部边界返回小部件文本基线的偏移量。

int getGravity()

介绍子视图的定位方式。

void requestLayout()

当事情发生变化时调用它,这已经使这个视图的布局无效。

void setGravity(int gravity)

介绍子视图的定位方式。

void setHorizontalGravity(int horizontalGravity)
void setIgnoreGravity(int viewId)

定义应用重力时忽略哪个视图。

void setVerticalGravity(int verticalGravity)
boolean shouldDelayChildPressedState()

如果应该延迟此ViewGroup的子项或后代的按下状态,则返回true。

Protected methods

boolean checkLayoutParams(ViewGroup.LayoutParams p)
ViewGroup.LayoutParams generateDefaultLayoutParams()

返回一组宽度为 WRAP_CONTENT ,高度为 WRAP_CONTENT且无跨越的布局参数。

ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams lp)

根据提供的布局参数返回一组安全的布局参数。

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

当这个视图为每个孩子分配一个大小和位置时,从布局调用。

void onMeasure(int widthMeasureSpec, int heightMeasureSpec)

测量视图及其内容以确定测量宽度和测量高度。

Inherited methods

From class android.view.ViewGroup
From class android.view.View
From class java.lang.Object
From interface android.view.ViewParent
From interface android.view.ViewManager
From interface android.graphics.drawable.Drawable.Callback
From interface android.view.KeyEvent.Callback
From interface android.view.accessibility.AccessibilityEventSource

XML attributes

android:gravity

指定对象应如何在其X轴和Y轴上将其内容定位在其自己的范围内。

必须是以下常量值中的一个或多个(用'|'分隔)。

Constant Value 描述
top 0x30 Push object to the top of its container, not changing its size.
bottom 0x50 Push object to the bottom of its container, not changing its size.
left 0x03 Push object to the left of its container, not changing its size.
right 0x05 Push object to the right of its container, not changing its size.
center_vertical 0x10 Place object in the vertical center of its container, not changing its size.
fill_vertical 0x70 Grow the vertical size of the object if needed so it completely fills its container.
center_horizontal 0x01 Place object in the horizontal center of its container, not changing its size.
fill_horizontal 0x07 Grow the horizontal size of the object if needed so it completely fills its container.
center 0x11 Place the object in the center of its container in both the vertical and horizontal axis, not changing its size.
fill 0x77 Grow the horizontal and vertical size of the object if needed so it completely fills its container.
clip_vertical 0x80 Additional option that can be set to have the top and/or bottom edges of the child clipped to its container's bounds. The clip will be based on the vertical gravity: a top gravity will clip the bottom edge, a bottom gravity will clip the top edge, and neither will clip both edges.
clip_horizontal 0x08 Additional option that can be set to have the left and/or right edges of the child clipped to its container's bounds. The clip will be based on the horizontal gravity: a left gravity will clip the right edge, a right gravity will clip the left edge, and neither will clip both edges.
start 0x00800003 Push object to the beginning of its container, not changing its size.
end 0x00800005 Push object to the end of its container, not changing its size.

这对应于全局属性资源符号 gravity

相关方法:

android:ignoreGravity

指示不应受重力影响的视图。

必须是另一个资源的引用,其形式为“ @[+][package:]type:name ”,或者其形式为“一个主题属性 ?[package:][type:]name ”。

这对应于全局属性资源符号 ignoreGravity

相关方法:

Constants

ABOVE

Added in API level 1
int ABOVE

将孩子的底部边缘与另一个孩子的顶部边缘对齐的规则。

常量值:2(0x00000002)

ALIGN_BASELINE

Added in API level 1
int ALIGN_BASELINE

将孩子的基线与另一孩子的基线对齐的规则。

常量值:4(0x00000004)

ALIGN_BOTTOM

Added in API level 1
int ALIGN_BOTTOM

将孩子的底部边缘与另一个孩子的底部边缘对齐的规则。

常量值:8(0x00000008)

ALIGN_END

Added in API level 17
int ALIGN_END

将孩子的末端与另一个孩子的末端对齐的规则。

常量值:19(0x00000013)

ALIGN_LEFT

Added in API level 1
int ALIGN_LEFT

将孩子的左边缘与另一个孩子的左边缘对齐的规则。

常量值:5(0x00000005)

ALIGN_PARENT_BOTTOM

Added in API level 1
int ALIGN_PARENT_BOTTOM

将孩子的底边与RelativeLayout父亲的底边对齐的规则。

常量值:12(0x0000000c)

ALIGN_PARENT_END

Added in API level 17
int ALIGN_PARENT_END

规则将孩子的结束边缘与其RelativeLayout父亲的结束边缘对齐。

常量值:21(0x00000015)

ALIGN_PARENT_LEFT

Added in API level 1
int ALIGN_PARENT_LEFT

将孩子的左边缘与其RelativeLayout父亲的左边缘对齐的规则。

常量值:9(0x00000009)

ALIGN_PARENT_RIGHT

Added in API level 1
int ALIGN_PARENT_RIGHT

将孩子的右边缘与其RelativeLayout父亲的右边缘对齐的规则。

常量值:11(0x0000000b)

ALIGN_PARENT_START

Added in API level 17
int ALIGN_PARENT_START

将孩子的起始边缘与其RelativeLayout父亲的起始边缘对齐的规则。

常量值:20(0x00000014)

ALIGN_PARENT_TOP

Added in API level 1
int ALIGN_PARENT_TOP

将孩子的顶边与RelativeLayout父亲的顶边对齐的规则。

常量值:10(0x0000000a)

ALIGN_RIGHT

Added in API level 1
int ALIGN_RIGHT

将孩子的右边缘与另一个孩子的右边缘对齐的规则。

常量值:7(0x00000007)

ALIGN_START

Added in API level 17
int ALIGN_START

将孩子的起始边缘与另一个孩子的起始边缘对齐的规则。

常量值:18(0x00000012)

ALIGN_TOP

Added in API level 1
int ALIGN_TOP

将孩子的上边缘与另一个孩子的上边缘对齐的规则。

常数值:6(0x00000006)

BELOW

Added in API level 1
int BELOW

将孩子的上边缘与另一个孩子的下边缘对齐的规则。

常量值:3(0x00000003)

CENTER_HORIZONTAL

Added in API level 1
int CENTER_HORIZONTAL

相对于其RelativeLayout父级的边界水平居中的规则。

常量值:14(0x0000000e)

CENTER_IN_PARENT

Added in API level 1
int CENTER_IN_PARENT

以孩子的RelativeLayout父母的界限为中心的规则。

常量值:13(0x0000000d)

CENTER_VERTICAL

Added in API level 1
int CENTER_VERTICAL

相对于其RelativeLayout父级的边界垂直居中的规则。

常量值:15(0x0000000f)

END_OF

Added in API level 17
int END_OF

将孩子的起始边缘与另一个孩子的结束边缘对齐的规则。

常量值:17(0x00000011)

LEFT_OF

Added in API level 1
int LEFT_OF

将孩子的右边缘与另一个孩子的左边缘对齐的规则。

常量值:0(0x00000000)

RIGHT_OF

Added in API level 1
int RIGHT_OF

将孩子的左边缘与另一个孩子的右边缘对齐的规则。

常数值:1(0x00000001)

START_OF

Added in API level 17
int START_OF

将孩子的最后边缘与另一个孩子的起始边缘对齐的规则。

常量值:16(0x00000010)

TRUE

Added in API level 1
int TRUE

常量值:-1(0xffffffff)

Public constructors

RelativeLayout

Added in API level 1
RelativeLayout (Context context)

Parameters
context Context

RelativeLayout

Added in API level 1
RelativeLayout (Context context, 
                AttributeSet attrs)

Parameters
context Context
attrs AttributeSet

RelativeLayout

Added in API level 1
RelativeLayout (Context context, 
                AttributeSet attrs, 
                int defStyleAttr)

Parameters
context Context
attrs AttributeSet
defStyleAttr int

RelativeLayout

Added in API level 21
RelativeLayout (Context context, 
                AttributeSet attrs, 
                int defStyleAttr, 
                int defStyleRes)

Parameters
context Context
attrs AttributeSet
defStyleAttr int
defStyleRes int

Public methods

generateLayoutParams

Added in API level 1
RelativeLayout.LayoutParams generateLayoutParams (AttributeSet attrs)

根据提供的属性集返回一组新的布局参数。

Parameters
attrs AttributeSet: the attributes to build the layout parameters from
Returns
RelativeLayout.LayoutParams an instance of ViewGroup.LayoutParams or one of its descendants

getAccessibilityClassName

Added in API level 23
CharSequence getAccessibilityClassName ()

返回此对象的类名称以用于辅助功能。 如果子类正在实现的东西应该被视为一个全新的视图类,当它被可访问性使用时,子类只应该覆盖这个子类,与它所源自的类无关。 这用于填写AccessibilityNodeInfo.setClassName

Returns
CharSequence

getBaseline

Added in API level 1
int getBaseline ()

从小部件的顶部边界返回小部件文本基线的偏移量。 如果此小部件不支持基线对齐,则此方法返回-1。

Returns
int the offset of the baseline within the widget's bounds or -1 if baseline alignment is not supported

getGravity

Added in API level 16
int getGravity ()

介绍子视图的定位方式。

相关XML属性:

Returns
int the gravity.

也可以看看:

requestLayout

Added in API level 1
void requestLayout ()

当事情发生变化时调用它,这已经使这个视图的布局无效。 这将安排视图树的布局传递。 当视图层次结构当前处于布局传递状态时( isInLayout()不应调用此视图层次结构(如果发生布局,则可以在当前布局传递结束时(然后布局将再次运行)或当前帧结束后绘制并发生下一个布局。

覆盖此方法的子类应调用超类方法以正确处理可能的布局错误请求。

setGravity

Added in API level 1
void setGravity (int gravity)

介绍子视图的定位方式。 默认为Gravity.START | Gravity.TOP

请注意,因为RelativeLayout认为每个孩子相对于另一个孩子的定位很重要,所以设置引力会影响所有孩子在父母中的位置。 这是在儿童相对定位后发生的。

相关XML属性:

Parameters
gravity int: See Gravity

也可以看看:

setHorizontalGravity

Added in API level 1
void setHorizontalGravity (int horizontalGravity)

Parameters
horizontalGravity int

setIgnoreGravity

Added in API level 1
void setIgnoreGravity (int viewId)

定义应用重力时忽略哪个视图。 如果重力是Gravity.START | Gravity.TOP则此设置Gravity.START | Gravity.TOP

相关XML属性:

Parameters
viewId int: The id of the View to be ignored by gravity, or 0 if no View should be ignored.

也可以看看:

setVerticalGravity

Added in API level 1
void setVerticalGravity (int verticalGravity)

Parameters
verticalGravity int

shouldDelayChildPressedState

Added in API level 14
boolean shouldDelayChildPressedState ()

如果应该延迟此ViewGroup的子项或后代的按下状态,则返回true。 通常,这应该对可以滚动的容器(例如List)完成。 这可以防止在用户实际尝试滚动内容时出现按下状态。 出于兼容性原因,默认实现返回true。 不滚动的子类通常应该重写此方法并返回false。

Returns
boolean

Protected methods

checkLayoutParams

Added in API level 1
boolean checkLayoutParams (ViewGroup.LayoutParams p)

Parameters
p ViewGroup.LayoutParams
Returns
boolean

generateDefaultLayoutParams

Added in API level 1
ViewGroup.LayoutParams generateDefaultLayoutParams ()

返回一组宽度为 WRAP_CONTENT ,高度为 WRAP_CONTENT且无跨越的布局参数。

Returns
ViewGroup.LayoutParams a set of default layout parameters or null

generateLayoutParams

Added in API level 1
ViewGroup.LayoutParams generateLayoutParams (ViewGroup.LayoutParams lp)

根据提供的布局参数返回一组安全的布局参数。 当一个ViewGroup被传递了一个View,其布局参数没有通过checkLayoutParams(android.view.ViewGroup.LayoutParams)的测试时,这个方法被调用。 此方法应该返回一组适合此ViewGroup的布局参数,可能是通过从指定的一组布局参数中复制适当的属性。

Parameters
lp ViewGroup.LayoutParams: The layout parameters to convert into a suitable set of layout parameters for this ViewGroup.
Returns
ViewGroup.LayoutParams an instance of ViewGroup.LayoutParams or one of its descendants

onLayout

Added in API level 1
void onLayout (boolean changed, 
                int l, 
                int t, 
                int r, 
                int b)

当这个视图为每个孩子分配一个大小和位置时,从布局调用。 带孩子的派生类应该覆盖这个方法,并调用他们每个孩子的布局。

Parameters
changed boolean: This is a new size or position for this view
l int: Left position, relative to parent
t int: Top position, relative to parent
r int: Right position, relative to parent
b int: Bottom position, relative to parent

onMeasure

Added in API level 1
void onMeasure (int widthMeasureSpec, 
                int heightMeasureSpec)

测量视图及其内容以确定测量宽度和测量高度。 此方法由measure(int, int)调用, measure(int, int)子类覆盖以提供其内容的准确和有效的度量。

合同:覆盖此方法时,您必须致电setMeasuredDimension(int, int)来存储此视图的测量宽度和高度。 如果不这样做,将触发IllegalStateException ,引发measure(int, int) 调用超类' onMeasure(int, int)是一种有效的用法。

Measure的基类实现默认为背景大小,除非MeasureSpec允许更大的大小。 子类应该覆盖onMeasure(int, int)以提供更好的内容度量。

如果此方法被覆盖,则子类的责任是确保测量的高度和宽度至少为视图的最小高度和宽度( getSuggestedMinimumHeight()getSuggestedMinimumWidth() )。

Parameters
widthMeasureSpec int: horizontal space requirements as imposed by the parent. The requirements are encoded with View.MeasureSpec.
heightMeasureSpec int: vertical space requirements as imposed by the parent. The requirements are encoded with View.MeasureSpec.

Hooray!