相对布局
RelativeLayout
是一种用相对位置显示所有子元素视图的ViewGroup。每个视图的位置都可以通过相对于相邻元素的位置来指定(例如在另一个视图的左边或下面),或相对于在父元素 RelativeLayout 区域中的位置指定(例如底部,左边或居中对齐)。
RelativeLayout
对于设计用户界面来说是很强大实用的,因为它不需要嵌套ViewGroup并且使你的布局扁平化,这样可以提升性能。如果你发现自己使用了很多嵌套的 LinearLayout 组,那么你可以使用一个 RelativeLayout 替代它们。
定位视图
RelativeLayout
可以让子元素视图相对于父元素视图或其他子元素视图的位置来指定它们的位置(通过ID指定)。所以你可以通过右边界对齐两个元素,或使一个在另一个下方,在屏幕居中,据中偏左等等。默认情况下,所有的子元素视图都在布局的左上角,所以你必须使用 RelativeLayout.LayoutParams 里可用的各种布局属性定义每个视图的位置。
在 RelativeLayout 里包含许多视图可用的布局属性中的一些:
-
若
"true"
,使视图的顶边与父元素的顶边对齐。 -
若
"true"
,使这个子元素在父元素中垂直居中。 - 使该视图的顶边处于资源ID指定的视图之下。
- 使视图的左侧边缘处于资源ID指定的视图右侧。
android:layout_alignParentTop
android:layout_centerVertical
android:layout_below
android:layout_toRightOf
这只是一些事例。所有的布局属性在 RelativeLayout.LayoutParams 里都有说明。
每个布局属性的值不是可以开启相对于父元素 RelativeLayout 的布局位置的布尔值,就是该视图用来参考放置的另外的视图的ID。
在你的XML布局中,被依赖的视图可以在布局中的任何位置声明。例如,尽管“view2”在层级中是最后一个被声明的视图,你仍然可以声明“view1”在“view2”的下方。下面的实例演示了这样的场景。
事例
控制每个视图相对位置的属性被加粗显示了。
<?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"
android:paddingLeft="16dp"
android:paddingRight="16dp" >
<EditText
android:id="@+id/name"
android:layout_width="fill_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.LayoutParams 了解更多关于 RelativeLayout 中子元素视图所有可用布局属性的细节。