我有一个包含三个元素的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>
答案 0 :(得分:1)
您是否有特殊原因将父亲使用RelativeLayout?这听起来像你应该使用包含TableLayout,ListView和LinearLayout(按顺序)的垂直LinearLayout,其中ListView具有layout_height =“0dip”和layout_weight =“1”。当您在底部LinearLayout上设置可见性时,ListView的布局权重应该使其扩展以填充空间。