Android 当一个视图组的子项与父项匹配时,它的兄弟项消失了,我如何使它与父项匹配?

Android 当一个视图组的子项与父项匹配时,它的兄弟项消失了,我如何使它与父项匹配?,android,android-layout,viewgroup,Android,Android Layout,Viewgroup,我有一个布局,其根ViewGroup有两个子项,其中只有一个子项始终可见。当不适用时,另一个子项的可见性将在运行时设置为View.GONE 当两个子项都可见时,高度设置为wrap\u content,布局看起来很棒。问题是,当另一个视图消失时,我想将可见视图扩展到match\u parent 有什么方法可以实现这一点或类似的功能吗?您可以像这样更改任何视图的布局: view.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, L

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

当两个子项都可见时,高度设置为
wrap\u content
,布局看起来很棒。问题是,当另一个视图消失时,我想将可见视图扩展到
match\u parent


有什么方法可以实现这一点或类似的功能吗?

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

view.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
构造函数先取宽度,然后取高度,如下所示:
newlayoutparams(int-width,int-height)

此外,每种类型的视图组都有一个LayoutParams类。确保导入引用特定视图组的视图。因此,如果您的视图组是线性布局,请使用:

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对象的引用,而不是重复创建新对象。

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

view.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
构造函数先取宽度,然后取高度,如下所示:
newlayoutparams(int-width,int-height)

此外,每种类型的视图组都有一个LayoutParams类。确保导入引用特定视图组的视图。因此,如果您的视图组是线性布局,请使用:

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\u weight

我把这个小例子放在一起。下面我添加了一张图片,显示了两个视图(左)以及view2可见性设置为
时的外观(右)。如您所见,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>


您是否尝试过使用
android:layout\u weight

我把这个小例子放在一起。下面我添加了一张图片,显示了两个视图(左)以及view2可见性设置为
时的外观(右)。如您所见,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>


我建议您使用ViewGroup作为TableLayout,我不确定我是否理解,如果您希望剩余的子视图拉伸整个父视图的高度,请使用Sam的方法,如果您希望子视图最终根据其内容大小填充父视图,那么您不必做任何事情,请将其保留为
wrap\u content
。如果这是关于你的最后一个问题,
TableLayout
有点问题(我不知道为什么我没有很好地阅读它的源代码),你可能可以通过另一个布局实现你想要的。@Luksprog,我可能会使用运行时方法ala Sam。我建议您使用ViewGroup作为TableLayout,我不确定我是否理解,如果您希望剩余的子视图拉伸整个父视图的高度,请使用Sam的方法,如果您希望子视图最终根据其内容大小填充父视图,则无需执行任何操作,将其与
包装内容一起保留
。如果这是关于你的最后一个问题,
TableLayout
有点问题(我不知道为什么我没有很好地查看它的源代码),你可能可以通过另一个布局实现你想要的。@Luksprog,我可能会使用运行时方法ala Sam。这很简单;我试图在没有示例的情况下,从API文档中自己找出这个策略,但没有成功。我正在采用
TableLayout
的方法,看看我是否不需要以编程的方式来做这件事。@JeffAxelrod我真的怀疑你是否能通过使用一个平台布局来做到这一点(如果你自己编写的布局是另一个故事,无论如何,那就太过分了)。xml布局不适合这种条件逻辑。@Luksprog嗨!我假设您认识到我只想要
fill\u parent
wrap\u content
的效果,而不是我真正需要它。我希望视图(例如,
TextView
)在运行时将同级设置为
GONE
时展开并填充整个父级,而不是将其与另一同级划分为
wrap\u content
-样式。你认为使用
表格布局是不可能的吗?@Luksprog你的怀疑很可能是有根据的。我没有成功地诱使
TableLayout
行的
EditText
超出默认大小;我试图在没有示例的情况下,从API文档中自己找出这个策略,但没有成功。我正在采用
TableLayout
的方法,看看我是否不需要以编程的方式来做这件事。@JeffAxelrod我真的怀疑你是否能通过使用一个平台布局来做到这一点(如果你自己编写的布局是另一个故事,无论如何,那就太过分了)。xml布局不适合这种条件逻辑。@Luksprog嗨!我假设您认识到我只想要
fill\u parent
wrap\u content
的效果,而不是我真正需要它。我希望视图(例如,
TextView
)在运行时将同级设置为
GONE
时展开并填充整个父级,而不是将其与另一同级划分为
wrap\u content
-样式。你认为使用
表格布局是不可能的吗?@Luksprog你的怀疑很可能是有根据的。我没有成功地诱使
TableLayout
行的
EditText
超出默认大小。这是一个好主意,只是它增加了一个(不需要的)约束,即当两个视图都显示时