LinearLayout权重未填充父级

时间:2014-09-10 23:25:16

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

环顾四周后,我还没有找到一个与我的问题相符的问题。我的问题是,我有一个ListView,其条目符合以下布局:

<?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="wrap_content"
    android:baselineAligned="false"
    android:paddingTop="5dp"
    android:paddingBottom="5dp"
    android:orientation="horizontal"
    android:descendantFocusability="blocksDescendants" >

    <LinearLayout 
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        amdroid:layout_weight="1"
        android:orientation="vertical" >
        ...
    </LinearLayout>

    <LinearLayout 
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        android:orientation="vertical" >
        ...
    </LinearLayout>

    <LinearLayout 
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical" >
        ...
    </LinearLayout>
</LinearLayout>

我希望这会产生一个条目,其中第一个嵌套布局获得可用宽度的1/4,第二个获得宽度的1/2,第三个获得宽度的1/4。但事实并非如此;相反,每个嵌套布局的宽度由于某种原因而被包装。

有趣的是,如果我在父LinearLayout而不是“match_parent”中指定特定宽度,嵌套布局宽度将遵循预期的权重。例如,以下内容产生预期结果:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="290dp"
    android:layout_height="wrap_content"
    android:baselineAligned="false"
    android:paddingTop="5dp"
    android:paddingBottom="5dp"
    android:orientation="horizontal"
    android:descendantFocusability="blocksDescendants" >

    <LinearLayout 
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        amdroid:layout_weight="1"
        android:orientation="vertical" >
        ...
    </LinearLayout>

    <LinearLayout 
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        android:orientation="vertical" >
        ...
    </LinearLayout>

    <LinearLayout 
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical" >
        ...
    </LinearLayout>
</LinearLayout>

显然,指定一个特定的宽度会忽略整个重量点。所以我的问题是:当使用“match_parent”时,为什么权重实际上不填充父LinearLayout,如何纠正?

哦,最后一点,当“match_parent”用于父LinearLayout宽度时,Eclipse中的图形布局预览会产生预期的结果。只有在实际设备上模拟或使用时,嵌套LinearLayouts的内容才会被宽度包装。我猜这是由于布局在ListView中的使用,但是谁知道呢?

由于

1 个答案:

答案 0 :(得分:2)

好吧,我现在感到愚蠢;我的怀疑是正确的:问题出在ListView上。

我指定了&#34; wrap_content&#34;对于实例化ListView的布局中的ListView宽度。通过指定&#34; match_parent&#34;来修正ListView宽度;生成入口布局的预期结果,而不依赖于硬编码的layout_width。