当兄弟姐妹GONE时,如何让ViewGroup子match_parent?

时间:2012-09-25 18:06:23

标签: android android-layout viewgroup

我有一个布局,其根ViewGroup有两个孩子,其中只有一个始终可见。当不适用时,另一个孩子的可见性将在运行时设置为View.GONE

当两个孩子都可见时,高度设置为wrap_content,布局看起来很棒。问题是,当另一个消失时,我想将可见视图扩展为match_parent

有没有办法完成这个或等同的?

2 个答案:

答案 0 :(得分:1)

您可以像这样更改任何View的布局:

view.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));

构造函数的宽度和高度如下所示:new LayoutParams(int width, int height) 每种类型的ViewGroup都有一个LayoutParams类。确保导入引用特定ViewGroup的那个。因此,如果您的ViewGroup是LinearLayout使用:

import android.widget.LinearLayout.LayoutParams;

  

我试图找出这个策略失败了

我不确定你遇到麻烦的地方,但这种做法只需要几个额外的行:

// When you want to show both views
view1.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
view2.setVisibility(View.VISIBLE);
...

// When you want to hide the second view
view1.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
view2.setVisibility(View.GONE);

如果多次隐藏/显示视图,则可以保存对每个LayoutParams对象的引用,而不是重复创建新对象。

答案 1 :(得分:0)

您是否尝试过使用android:layout_weight

我把这个小例子放在一起。下面我添加了一张图片,显示了两个视图可见(左)以及view2可见性设置为GONE(右)的样子。如您所见,view1会占用所有可用空间。

<?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="match_parent"
    android:orientation="vertical" >

    <View
        android:id="@+id/view1"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="#ff0000" />

    <View
        android:id="@+id/view2"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="#0000ff" />

</LinearLayout>

example