Android:将视图高度设置为0

Android:将视图高度设置为0,android,android-layout,Android,Android Layout,我有一个包含三个元素的RelativeLayout:顶部的TableLayout包含一些控件(layout_alignParentTop=true),底部的LinearLayout(layout_alignParentBottom=true),包含两个按钮,以及在它们之间延伸的ListView(使用两个元素下方的layout_和上方的layout_)。这很有效,但在某些情况下,底线布局需要取消。如果使用setVisibility将其设置为View.GONE,或使用setLayoutParams(

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

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

编辑:中间的布局实际上是一个包含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>


您使用RelativeLayout作为父项是否有特殊原因?这听起来像是一种情况,在这种情况下,您应该使用垂直线性布局,其中包含表格布局、ListView,然后是线性布局(按该顺序),其中ListView具有布局\u height=“0dip”和布局\u weight=“1”。在底部线性布局上设置可见性时,ListView的布局权重应使其展开以填充空间。

是否有特定原因将RelativeLayout用于父级?这听起来像是一种情况,在这种情况下,您应该使用垂直线性布局,其中包含表格布局、ListView,然后是线性布局(按该顺序),其中ListView具有布局\u height=“0dip”和布局\u weight=“1”。当您在底部线性布局上设置可见性时,ListView的布局权重应使其展开以填充空间。

您可以发布布局的.xml吗?实际的xml非常复杂,因为布局由不同活动使用的几个布局文件组成,但我在上面发布了一个简化版本。我意识到中间区域实际上是一个包含ListView的RelativeLayout,这可能会有所不同,我将尝试消除它。你能发布布局的.xml吗?实际的xml非常复杂,因为布局由几个不同活动使用的布局文件组成,但我在上面发布了一个简化版本。我意识到中间区域实际上是一个包含ListView的RelativeLayout,这可能会有所不同,我将尝试消除它。layout_weight是正确的解决方案。不是他还没想到,就是问题比我们想象的要复杂?但我对此表示怀疑。这就是为什么xml会很有用。这样我们就可以很快地修复它:DIt是一个RelativeLayout,因为包含顶部和底部元素的布局文件在多个活动中使用,其中一些活动使用它是一个RelativeLayout的事实来适当地定位子元素。并不是所有可能的布局都能作为线性布局轻松工作。布局权重是正确的解决方案。不是他还没想到,就是问题比我们想象的要复杂?但我对此表示怀疑。这就是为什么xml会很有用。这样我们就可以很快地修复它:DIt是一个RelativeLayout,因为包含顶部和底部元素的布局文件在多个活动中使用,其中一些活动使用它是一个RelativeLayout的事实来适当地定位子元素。并非所有可能的布局都能轻松地作为线性布局工作。