Android垂直布局为孩子分配相同的权重(高度)

时间:2013-02-26 01:05:21

标签: android xml android-linearlayout

我在垂直布局中有三个水平布局。我希望这三个水平子布局占据相同的空间,所以我每个都添加权重(0.33)。

我将三个子布局组件的布局高度指定为0dp,因为父布局是垂直的,但子布局不会像预期的那样占据相同的高度。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/paper"
    android:paddingLeft="4dp"
    android:paddingRight="8dp"
    tools:context=".TestActivity" >

         <LinearLayout
            android:id="@+id/scratchLayout"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:orientation="vertical" >

             <LinearLayout
                android:id="@+id/topLayout"
                android:layout_width="wrap_content"
                android:layout_height="0dp"
                android:layout_weight="0.33"
                android:layout_marginLeft="3dp"
                android:layout_marginRight="3dp" 
                android:orientation="horizontal" >

                <TextView
                    android:id="@+id/topArea1"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:background="@android:color/transparent"
                    android:paddingRight="3dp"
                    android:text="Top Area 2"
                    android:textSize="15dp" />

                <TextView
                    android:id="@+id/topArea2"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:background="@android:color/transparent"
                    android:paddingRight="3dp"
                    android:text="Top Area 1"
                    android:textSize="15dp" />
             </LinearLayout>

             <LinearLayout
                android:id="@+id/centerLayout"
                android:layout_width="wrap_content"
                android:layout_height="0dp"
                android:layout_weight="0.33"
                android:layout_marginLeft="3dp"
                android:layout_marginRight="3dp" 
                android:orientation="horizontal" >

                 <TextView
                 android:id="@+id/centerArea1"
                 android:layout_width="fill_parent"
                 android:layout_height="wrap_content"
                 android:layout_marginRight="3dp"
                 android:text="Center Area 1" />

                 <TextView
                 android:id="@+id/centerArea2"
                 android:layout_width="fill_parent"
                 android:layout_height="wrap_content"
                 android:layout_marginRight="3dp"
                 android:text="Center Area 2" />

            </LinearLayout>

             <LinearLayout
                android:id="@+id/BottomLayout"
                android:layout_width="wrap_content"
                android:layout_height="0dp"
                android:layout_weight="0.33"
                android:layout_marginLeft="3dp"
                android:layout_marginRight="3dp" 
                android:orientation="horizontal" >

                 <TextView
                 android:id="@+id/bottomArea1"
                 android:layout_width="fill_parent"
                 android:layout_height="wrap_content"
                 android:layout_marginRight="3dp"
                 android:text="Bottom Area 1" />

                 <TextView
                 android:id="@+id/bottomArea2"
                 android:layout_width="fill_parent"
                 android:layout_height="wrap_content"
                 android:layout_marginRight="3dp"
                 android:text="Bottom Area 2" />

            </LinearLayout>

         </LinearLayout>

</RelativeLayout>

2 个答案:

答案 0 :(得分:3)

快速注释:嵌套的权重导致性能不佳,尽可能避免。不要混用match_parentfill_parent。只需使用match_parent

您的主要问题是您的外layout_height="wrap_content" LinearLayout,但您有权重。您指定每个子布局为总数的1/3,但随后说总数应为其子项的总和。每个孩子的布局应该是1dp吗? 100dp?如果您希望每个屏幕都是整个屏幕的1/3,则应为外部layout_height="match_parent"设置LinearLayout

答案 1 :(得分:0)

我同意Kabuko,请将所有fill_parent更改为match_parent。

如上所述,我建议将高度更改为0dp,但为所有LinearLayout设置权重1。

重量值是“因素”而不是百分比。

请参阅此What does android:layout_weight mean?以获取有关如何使用layout_weight

的清除示例