查看重量

LinearLayout 最常用的属性之一是其子视图的权重 。权重定义视图与 LinearLayout 中的其他视图相比将消耗多少空间。

当你想要为一个组件提供特定屏幕空间时,使用权重。

主要特性

  • weightSum 是所有子视图的权重的总和。如果未指定 weightSum,系统将自行计算所有权重的总和。

  • layout_weight 指定小部件占用的总权重总和中的空间量。

码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:weightSum="4">

    <EditText
        android:layout_weight="2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="Type Your Text Here" />

    <Button
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="Text1" />

    <Button
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="Text1" />

</LinearLayout>

输出是:

http://i.stack.imgur.com/tEbKrl.jpg

现在,即使设备的尺寸较大,EditText 也将占据屏幕空间的 2/4。因此,你的应用程序外观在所有屏幕上都是一致的。

注意: 这里 layout_width 保持 0dp,因为小部件空间是水平划分的。如果要将小部件垂直对齐,则 layout_height 将设置为 0dp。这样做是为了提高代码的效率,因为在运行时系统不会分别尝试计算宽度或高度,因为这是由权重管理的。如果你改为使用 wrap_content,系统将在应用权重属性之前首先尝试计算宽度/高度,这会导致另一个计算周期。