我有一个布局,其根ViewGroup
有两个孩子,其中只有一个始终可见。另一个孩子的可见性将在运行View.GONE
时设置为不适用时。
当两个孩子都可见时,高度设置为wrap_content
并且布局看起来很棒。问题是我想将可见视图扩展到match_parent
另一个消失时。
有什么办法可以做到这一点或等效的吗?
我有一个布局,其根ViewGroup
有两个孩子,其中只有一个始终可见。另一个孩子的可见性将在运行View.GONE
时设置为不适用时。
当两个孩子都可见时,高度设置为wrap_content
并且布局看起来很棒。问题是我想将可见视图扩展到match_parent
另一个消失时。
有什么办法可以做到这一点或等效的吗?
您可以像这样更改任何视图的布局:
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 对象的引用,而不是重复创建新对象。
您是否尝试过与之合作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>