0

我在使用 Android 中的 LinearLayout 和权重时遇到问题。我想要一个水平的线性布局来容纳 2 个垂直的线性布局,由一个具有 9 个补丁背景的视图分隔,作为 2 个垂直的线性布局之间的分隔符。

像这样:(外框是外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>

我在这里做错了什么?我一生都无法弄清楚为什么中间视图占用了所有空间,而没有为第二个内部线性布局留下任何空间。

如果我为 9-patch 视图指定特定的 px 或 dp 宽度,我可以让它工作,但我真的希望它工作而不必指定这个宽度。这样,如果我决定更改我的 9-patch 可绘制对象,我就不必手动更新宽度。

4

5 回答 5

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>

于 2013-09-11T06:07:15.880 回答
0

在这里更新并尝试

<View
        android:layout_width="match_parent"
        android:layout_height="2dp"
        android:background="@drawable/divider_vertical"
 />
于 2013-09-11T06:07:43.487 回答
0

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

于 2013-09-11T17:52:11.770 回答
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>

当然,您可以尝试权重值

于 2013-09-11T17:52:38.717 回答
0
  • weightSum="2"从父 LinearLayout 中删除。
  • android:layout_weight="0"从 9 补丁视图中删除
于 2013-09-11T06:11:33.580 回答