Android布局权重:如何解释宽度设置时的比例计算' match_parent'

时间:2017-05-25 11:52:50

标签: android layout android-layout-weight

我是android的新手。当我了解重量'布局的属性,我很困惑。
我知道当layout_width设置为 0dp 时,每个元素都会占用weight/weightSum。 但是,当layout_width设置为 match_parrent (可能不推荐)时,它有点复杂。
有人说公式是:

  

delta = 1-numOfElement;
  比例[i] = 1 + delta *(weight [i] / weightSum);

让我举一个例子来说清楚

<?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:orientation="horizontal">

    <EditText 
        android:id="@+id/edit_message"
        android:layout_width="match_parent"
        android:layout_weight="2"
        android:layout_height="wrap_content"
        android:hint="@string/edit_message" />

    <Button
        android:text="@string/button_cancel"
        android:layout_weight="3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="sendMessage"/>
    <Button
        android:text="@string/button_send"
        android:layout_weight="4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

有3个元素,因此delta = 1-3 = -2;
weightSum =(2 + 3 + 4)= 9;
比例[0] = 1 +( - 2)(2/9)= 5/9;
比例[1] = 1 +( - 2)
(3/9)= 3/9;
比例[2] = 1 +( - 2)*(4/9)= 1/9;

  

所以它实际上是5:3:1

但我不明白其含义,有人可以解释一下吗?〜 或者如果公式错误,请更正〜谢谢

1 个答案:

答案 0 :(得分:2)

如果LinearLayout中有2个视图,第一个视图的layout_weight为1,第二个视图的layout_weight为2且没有指定weightSum,默认情况下,weightSum计算为3(权重的总和)儿童)和第一个视图占用空间的1/3,而第二个视图占用2/3。

但是,如果我们将weightSum指定为5,则第一个占用空间的1/5,而第二个占用2/5。因此,布局将占据总空间的3/5,其余部分为空。

Calculation to assign any Remaining/Extra space between child. (not the total space)

space assign to child = (child individual weight) / (sum of weight of every child in Linear Layout)

如果任何一个孩子的体重为0,那么它占用了渲染所需的最小空间,其余的可用空间通过以上公式分配给孩子们

反向扩展发生在您的案例中,因为: 因为您使用match_parent作为layout_width。权重用于分配剩余的空白空间,并且您的第一个元素具有匹配的父元素,因此它尝试水平占据最高空间,剩余较小的空间分布在另外两个子元素中。

同样对于第二个孩子,它会尝试扩展到可用的最大空间,为最后一个孩子留下更少的空间,因此扩展完全与所应用的个体权重相反。

换句话说, 在这种情况下,match_parent像老板一样占主导地位。 这里没有具体的计算方法,而且可以非常清楚地看到有序儿童的优先顺序。