Android LinearLayout和权重问题

时间:2013-09-11 05:54:39

标签: android android-layout android-linearlayout android-view android-layout-weight

我在Android中遇到LinearLayout和权重问题。我想要一个水平的LinearLayout来保存2个垂直的LinearLayouts,它们由一个具有9个补丁背景的View分隔,成为2个垂直LinearLayouts之间的分隔符。

像这样:(外框是外部LinearLayout,中间双线是我的9个修补程序分隔符。)

----------------------------
|    one    ||    three    |
|    two    ||    four     |
----------------------------

持续发生的事情是第一个内部LinearLayout以最小宽度显示以显示其内容(就好像它的宽度为wrap_content),然后空间的其余部分由分隔符视图占用,其中拉伸以填充其余部分外部LinearLayout。第二个内部LinearLayout根本没有显示。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:weightSum="2" >    
    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:gravity="center_horizontal"
        android:layout_weight="1" >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="one" />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="two" />
    </LinearLayout>

    <View
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:background="@drawable/divider_vertical"
        android:layout_weight="0" />

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:gravity="center_horizontal"
        android:layout_weight="1" >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="three" />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="four" />
    </LinearLayout>

</LinearLayout>

我在这里做错了什么?我无法弄清楚为什么中间视图占据了所有空间,为第二个内部LinearLayout没有留下任何空间。

如果我为9补丁视图指定了特定的px或dp宽度,我可以让它工作,但我真的希望它能够工作而不必指定这个宽度。这样,如果我决定更改我的9-patch drawable,我将不必手动更新宽度。

5 个答案:

答案 0 :(得分:1)

尝试此布局

更新了布局

<LinearLayout
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:gravity="center_horizontal"
    android:orientation="vertical" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="one" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="two" />
</LinearLayout>

<View
    android:layout_width="1dp"
    android:layout_height="88dp"
    android:background="@android:color/darker_gray" />

<LinearLayout
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:gravity="center_horizontal"
    android:orientation="vertical" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="three" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="four" />
</LinearLayout>

答案 1 :(得分:0)

在此更新并尝试

<View
        android:layout_width="match_parent"
        android:layout_height="2dp"
        android:background="@drawable/divider_vertical"
 />

答案 2 :(得分:0)

  • 从父级LinearLayout中删除weightSum="2"
  • 从9补丁视图中删除android:layout_weight="0"

答案 3 :(得分:0)

你的9补丁有多大? 9补丁的可伸缩区域不可收缩 - 资产文件的宽度将决定它将尝试在LinearLayout中占用的最小空间。

答案 4 :(得分:0)

将布局权重设置如下

请记住父级的weightSum默认设置为子项的layout_weight和

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    >    
    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:gravity="center_horizontal"
        android:layout_weight="3" >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="one" />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="two" />
    </LinearLayout>

    <View
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:background="@drawable/divider_vertical"
        android:layout_weight="1" />

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:gravity="center_horizontal"
        android:layout_weight="3" >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="three" />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="four" />
    </LinearLayout>

</LinearLayout>

当然你可以试验重量值