相对布局

尝试 Compose 方式
Jetpack Compose 是 Android 推荐的 UI 工具包。了解如何在 Compose 中使用布局。

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