RelativeLayout
是一个视图组,它以相对位置显示子视图。每个视图的位置可以相对于兄弟元素(例如,另一个视图的左侧或下方)指定,也可以相对于父 RelativeLayout
区域(例如,与底部、左侧或中心对齐)指定。
注意: 为了获得更好的性能和工具支持,您应该使用 ConstraintLayout 构建您的布局。
RelativeLayout
是一个非常强大的设计用户界面的工具,因为它可以消除嵌套的视图组,并使您的布局层次结构保持扁平,从而提高性能。如果您发现自己使用了多个嵌套的 LinearLayout
组,则可以将它们替换为单个 RelativeLayout
。
定位视图
RelativeLayout
允许子视图指定它们相对于父视图或彼此(由 ID 指定)的位置。因此,您可以通过右边界对齐两个元素,或使一个元素位于另一个元素下方,居中在屏幕上,居中左侧,等等。默认情况下,所有子视图都在布局的左上角绘制,因此您必须使用来自 RelativeLayout.LayoutParams
的各种布局属性定义每个视图的位置。
RelativeLayout
中的视图可使用许多布局属性,其中一些包括
android:layout_alignParentTop
- 如果为
"true"
,则使此视图的顶部边缘与父级的顶部边缘匹配。 android:layout_centerVertical
- 如果为
"true"
,则将此子视图垂直居中于其父级内。 android:layout_below
- 将此视图的顶部边缘定位在使用资源 ID 指定的视图下方。
android:layout_toRightOf
- 将此视图的左边缘定位在使用资源 ID 指定的视图的右侧。
这些只是一些示例。所有布局属性都在 RelativeLayout.LayoutParams
中有说明。
每个布局属性的值可以是布尔值,以启用相对于父 RelativeLayout
的布局位置,也可以是引用布局中其他视图的 ID,该视图应该针对该视图进行定位。
在您的 XML 布局中,可以以任何顺序声明对布局中其他视图的依赖关系。例如,您可以声明“view1”位于“view2”下方,即使“view2”是在层次结构中最后声明的视图。以下示例演示了这种情况。
示例
控制每个视图的相对位置的每个属性都已强调。
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="16dp" android:paddingRight="16dp" > <EditText android:id="@+id/name" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/reminder" /> <Spinner android:id="@+id/dates" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_below="@id/name" android:layout_alignParentLeft="true" android:layout_toLeftOf="@+id/times" /> <Spinner android:id="@id/times" android:layout_width="96dp" android:layout_height="wrap_content" android:layout_below="@id/name" android:layout_alignParentRight="true" /> <Button android:layout_width="96dp" android:layout_height="wrap_content" android:layout_below="@id/times" android:layout_alignParentRight="true" android:text="@string/done" /> </RelativeLayout>
有关可用于 RelativeLayout
每个子视图的所有布局属性的详细信息,请参阅 RelativeLayout.LayoutParams
。