Android:将视图高度设置为0

时间:2010-11-18 01:21:23

标签: android android-layout

我有一个包含三个元素的RelativeLayout:顶部的TableLayout包含一些控件(layout_alignParentTop = true),底部的LinearLayout(layout_alignParentBottom = true)包含几个按钮和一个在它们之间延伸的ListView(使用layout_below和layout_above两个元素)。这很好用,但在某些情况下,底部的LinearLayout需要消失。如果我使用setVisibility将其设置为View.GONE或使用setLayoutParams()将其高度设置为0,则ListView会顽固地拒绝调整大小以占用新释放的空间。我已经尝试在层次结构中的所有内容上调用requestLayout(),似乎没有任何工作。如果我启动层次结构查看器,我可以看到视图已经消失/ layout_height为0,但它仍然不起作用。

具有讽刺意味的是,在层次结构查看器完成后,布局会自行更正。我认为让我的用户运行层次结构查看器可能是不可接受的。

编辑:中间布局实际上是一个包含ListView的RelativeLayout,这可能很重要,我将尝试消除它。我发布了一个简化版的XML,它可以让我知道我在看什么。

<RelativeLayout
    android:id="@+id/main_container"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <TableLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/top_table"
        android:layout_alignParentTop="true"
        android:stretchColumns="2"
        android:shrinkColumns="1">
        <!-- removed for simplicity -->
    </TableLayout>
    <RelativeLayout
        android:id="@+id/main_content"
        android:descendantFocusability="afterDescendants"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_below="@id/title_table"
        android:layout_above="@id/ad_toolbar">
        <!-- removed for simplicity -->
        <ListView 
            android:id="@+id/android:list"
            android:layout_alignParentTop="true"
            android:descendantFocusability="afterDescendants"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
    </RelativeLayout>

    <LinearLayout
        android:id="@+id/bottom_layout"
        android:orientation="vertical"
        android:layout_alignParentBottom="true"
        android:layout_height="wrap_content"
        android:layout_width="fill_parent">
        <!-- removed for simplicity -->
    </LinearLayout>
</RelativeLayout>

1 个答案:

答案 0 :(得分:1)

您是否有特殊原因将父亲使用RelativeLayout?这听起来像你应该使用包含TableLayout,ListView和LinearLayout(按顺序)的垂直LinearLayout,其中ListView具有layout_height =“0dip”和layout_weight =“1”。当您在底部LinearLayout上设置可见性时,ListView的布局权重应该使其扩展以填充空间。