相对布局

尝试 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,该 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