了解android:layout_weight

时间:2016-09-15 10:34:18

标签: android xml android-layout android-studio android-layout-weight

为什么以下列表仅显示第二个TextView(红色)?

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:text="11111"
        android:background="#00FF00" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="0"
        android:background="#FF0000"
        android:text="00000"/>
</LinearLayout>

我知道如果我设置android:layout_height="0px",它只显示第一个TextView(绿色),我理解这种行为。

但是,当我设置android:layout_height="match_parent"时,第一个TextView完全从屏幕上消失。

7 个答案:

答案 0 :(得分:3)

来自https://developer.android.com/guide/topics/ui/layout/linear.html

它消失了,因为第二个获得完整的空间,因为它被给予

android:layout_weight="0"

android:layout_height="match_parent" **,如上所述。

  

LinearLayout还支持为各个孩子分配权重   使用android:layout_weight属性。此属性指定一个   对于视图的“重要性”价值应该是多少空间   占据屏幕上。较大的重量值允许它扩展到   填充父视图中的任何剩余空间。子视图可以指定一个   权重值,然后视图组中的任何剩余空间   按照宣称的体重比例分配给儿童。   默认权重为零

     

例如,如果有三个文本字段,其中两个声明了一个   重量为1,而另一个没有重量,第三个文字字段   没有重量不会增长,只会占据所需的面积   它的内容。其他两个将同等扩展以填补空间   测量完所有三个字段后剩下的。

     

如果第三个字段的权重为2(而不是0),那么它   现在被宣布比其他人更重要,所以它变得一半   总剩余空间,而前两个平均分享其余部分。

答案 1 :(得分:1)

android:layout_weight="1"表示您正在将未被其他视图占用的剩余空间分配给该视图..所以在这种情况下第二 TextView是match_parent所以没有空格留空是为什么第一个 TextView不可见

P.S:将权重传递给父布局,并根据您的需要在子视图中分配权重 感谢

答案 2 :(得分:0)

你的代码基本上是说,给我的第一个文本视图所有的空间和我的第二个文本视图无,尝试给每个孩子一个权重1,这应该给他们相等的间距。此外,由于您具有垂直定向父级,因此在子级中设置与父级匹配的布局高度与weight属性相矛盾。所以删除它并替换换行内容。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:text="11111"
    android:background="#00FF00" />

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:background="#FF0000"
    android:text="00000"/>
  </LinearLayout>

答案 3 :(得分:0)

android:layout_weight意味着你希望这些视图与彼此和父视图相比较 例如,如果你这些代码:

 <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Button2"/>
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Button1"/>
    </LinearLayout>

the result will be this image

如果我将Button1的layout:weight从1更改为2而Button2的重量仍为1,那么Button1的宽度将比Button2的2倍大

答案 4 :(得分:0)

您已将第一个按钮的重量值设置为1,将第二个按钮的重量值设置为0,  所以按钮一将覆盖整个空间

您应该给父母布局一个权重总额,并根据所需的比例在孩子之间分配总额。

答案 5 :(得分:0)

https://developer.android.com/guide/topics/ui/layout/linear.html https://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html

https://ugia.io/2012/01/19/android-linearlayout-distribution-explained-weight-and-sizes/

match_parent与wrap_content或特定大小(0px,1px,100px等)不同,在您的情况下,它将占用父视图的所有空间,直到LinearLayout的大小。

layout_weight用于平衡,它取决于你的layout_width

答案 6 :(得分:0)

但是为什么,如果我在第二个TextView中设置:

android: layout_weight = "0.1" 

TextView的第二个组件占用的空间比设置时少:

android: layout_weight = "0"

如果我在第二个TextView中设置

android: layout_weight = "0.2"

TextView的第二个组件占用的空间比设置

的空间要小

android:layout_weight =&#34; 0.1&#34;

因此,如果我将android:layout_weight的值设置得更高,那么它占用的尺寸会更小。