Android Dev Summit, October 23-24: two days of technical content, directly from the Android team. Sign-up for livestream updates.

线性布局

LinearLayout 是一个视图组,用于使所有子视图在单个方向(垂直或水平)保持对齐。您可使用 android:orientation 属性指定布局方向。

请注意:如要获取更好的性能和工具支持,请改用 ConstraintLayout 构建布局

LinearLayout 的所有子视图依次堆叠,因此无论子视图有多宽,垂直列表每行均只有一个子视图,水平列表将只有一行高(最高子视图的高度加上内边距)。LinearLayout 会考虑子视图之间的边距以及每个子视图的对齐方式(右对齐、居中对齐或左对齐)。

布局权重

LinearLayout 还支持使用 android:layout_weight 属性为各个子视图分配权重。此属性会根据视图应在屏幕上占据的空间大小,向视图分配“重要性”值。如果拥有更大的权重值,则视图便可展开,进而填充父视图中的任何剩余空间。子视图可指定权重值,然后系统会按照子视图所声明的权重值比例,为其分配视图组中的任何剩余空间。默认权重为零。

均等分布

如要创建线性布局,让每个子视图使用大小相同的屏幕空间,请将每个视图的 android:layout_height 设置为 "0dp"(针对垂直布局),或将每个视图的 android:layout_width 设置为 "0dp"(针对水平布局)。然后,请将每个视图的 android:layout_weight 设置为 "1"

不等分布

您也可创建线性布局,让子元素使用大小不同的屏幕空间:

  • 如果有三个文本字段,其中两个声明权重为 1,另一个未赋予权重,则没有权重的第三个文本字段将不会扩展,并且仅占据其内容所需的区域。另一方面,另外两个文本字段将以同等幅度进行扩展,以填充测量三个字段后仍剩余的空间。
  • 如果有三个文本字段,其中两个字段声明权重为 1,而为第三个字段赋予权重 2(而非 0),则现声明第三个字段比另外两个字段更为重要,因此,该字段将获得总剩余空间的一半,而其他两个字段均享余下的空间。

以下代码段显示布局权重如何在“send message”Activity 中发挥作用。To 字段、Subject 行和 Send 按钮均仅占用各自所需的高度。此配置允许消息自身占用 Activity 的剩余高度。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical" >
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/to" />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/subject" />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:gravity="top"
        android:hint="@string/message" />
    <Button
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:text="@string/send" />
</LinearLayout>

如需详细了解 LinearLayout 每个子视图的可用属性,请参阅 LinearLayout.LayoutParams