LinearLayout
是一个视图组,用于在单个方向(垂直或水平)对齐所有子项。您可以使用 android:orientation
属性指定布局方向。
LinearLayout
的所有子项都会依次堆叠,因此无论垂直列表有多宽,每行都只有一个子项。水平列表只有一行高,并且是最高的子项的高度,外加内边距。LinearLayout
会考虑子级之间的外边距和每个子级的重心(右对齐、居中对齐或左对齐)。
布局粗细
LinearLayout
还支持使用 android:layout_weight
属性为各个子项分配权重。此属性会根据视图在屏幕上占据的空间大小,为视图分配“重要性”值。较大的权重值允许其展开即可填充父视图中的剩余空间。子视图可以指定权重值,系统将根据子视图声明的权重,将视图组中的任何剩余空间按比例分配给子视图。默认权重为零。
均等分布
如需创建线性布局,使每个子视图在屏幕上占用相同的空间,请将每个视图的 android:layout_height
设置为 "0dp"
(对于垂直布局)或将每个视图的 android:layout_width
设置为 "0dp"
(对于水平布局)。然后,将每个视图的 android:layout_weight
设置为 "1"
。
不等分布
您还可以创建线性布局,让子元素使用不同大小的屏幕空间。请参考以下示例:
- 假设您有三个文本字段:两个文本字段的权重值为 1,第三个字段的默认权重值为 0。第三个文本字段的权重值为 0,仅占据其内容所需的区域。另外两个文本字段(权重值为 1)则以相等的方式扩展,以填充所有三个字段的内容测量后剩余的空间。
- 如果您有三个文本字段,其中两个文本字段的权重值为 1,第三个字段的权重为 2,则在测量所有三个字段的内容后,剩余的空间将按以下方式分配:一半分配给权重值为 2 的字段,一半在权重值为 1 的字段之间平均分配。
下图和代码段展示了布局权重在“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="end" android:text="@string/send" /> </LinearLayout>
如需详细了解 LinearLayout
的每个子视图可用的属性,请参阅 LinearLayout.LayoutParams
。