如何一次隐藏多个视图?

Posted

技术标签:

【中文标题】如何一次隐藏多个视图?【英文标题】:How do you hide multiple views at once? 【发布时间】:2012-01-01 09:46:27 【问题描述】:

我有一个RelativeLayout 视图,还有 3 个孩子的视图。我试图通过使用setVisibility 将相对布局设置为不可见来将它们全部隐藏在代码中。有趣的是,当我使用setVisibility(View.INIVISIBLE) 时,只有第一个孩子被隐藏,而不是其他两个。所以我有点困惑 - 如果我将父视图设置为不可见,它不应该改变所有孩子的可见性还是让他们一个人呆着?

请随时将我指向解释它的参考页面 - 我找不到任何东西。

更新:我尝试将其设置为 View.GONE,但同样的事情发生了,除了仍然可见的两个孩子向上移动了一点。

这是相关的 XML:

<RelativeLayout
    android:id="@+id/optionsform"
    android:layout_
    android:padding="8dp"
    android:layout_ >
    
    <TextView
        android:id="@+id/tvoptions"
        android:layout_
        android:layout_
        android:layout_alignParentLeft="true"
        android:text="@string/tvoptions"
        android:textColor="#f000"
        android:textAppearance="?android:attr/textAppearanceMedium" android:textStyle="bold"/>
    
    <TextView
        android:id="@+id/tvdictionary"
        android:layout_
        android:layout_
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/tvoptions"
        android:layout_marginLeft="30dp"
        android:layout_marginTop="16dp"
        android:text="@string/dictionary"
        android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="#f000" />

    <Spinner
        android:id="@+id/dictionary"
        android:layout_
        android:layout_
        android:layout_alignTop="@+id/tvdictionary"
        android:layout_alignParentRight="true"
        android:layout_marginTop="-10dp"
        android:layout_marginLeft="6dp"
        android:layout_toRightOf="@+id/tvdictionary" />

</RelativeLayout>

这是我正在使用的相关代码:

    public void onClick(View v) 
        //Toggle viewing of options, using "if" in case it is set to View.GONE 
        View view = findViewById(R.id.optionsform);
        if (view.getVisibility() == View.VISIBLE) 
            view.setVisibility(View.INVISIBLE);
        else
            view.setVisibility(View.VISIBLE);
    

【问题讨论】:

请发布您的布局和代码。您描述的方式是正确的,隐藏布局在正常情况下会隐藏所有子项。 这个真的很奇怪,不知道是不是和relative layout有关..能不能暂时改成linearlayout看看会不会出现同样的问题 你能把你的整个活动代码粘贴到这里吗.. 已解决。在我的安卓设备上卸载然后安装应用程序就可以了。我以后会注意的。 【参考方案1】:

尝试将所有三个视图设置为View.INVISIBLEView.GONE

你可以试试

public void onClick(View v) 
    //Toggle viewing of options, using "if" in case it is set to View.GONE 
    RelativeLayout view = (RelativeLayout) findViewById(R.id.optionsform);
    if (view.getVisibility() == View.VISIBLE) 
        view.setVisibility(View.INVISIBLE);
    else
        view.setVisibility(View.VISIBLE);

【讨论】:

嗯,是的,我可以做到这一点,但如果它对父级执行,它的大量冗余代码就足够了。我将在周一再次使用上述建议进行调查。【参考方案2】:

您必须设置为View.GONE 状态。

【讨论】:

他可能只是想隐藏(不可见)它……但值得一试 Gone 似乎没有帮助 - 它只是将仍然可见的两个孩子移动到屏幕上方。【参考方案3】:
 <TextView
        android:id="@+id/tvdictionary"
        android:layout_
        android:layout_
        android:layout_alignParentLeft="true"
        **android:layout_below="@+id/tvoptions"** // *should  be  android:layout_below="@id/tvoptions*
        android:layout_marginLeft="30dp"
        android:layout_marginTop="16dp"
        android:text="@string/dictionary"
        android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="#f000" />



     <Spinner
            android:id="@+id/dictionary"
            android:layout_
            android:layout_
            **android:layout_alignTop="@+id/tvdictionary"** // *should be android:layout_alignTop="@id/tvdictionary*
            android:layout_alignParentRight="true"
            android:layout_marginTop="-10dp"
            android:layout_marginLeft="6dp"
            android:layout_toRightOf="@+id/tvdictionary"// *should be android:layout_toRightOf="@id/tvdictionary*
 />

在引用布局 id 时使用@id @+id 在创建新布局 id 时使用

【讨论】:

有趣,上面是 eclipse ADT 插件自动生成的代码。我会试一试,然后回复你。 我已经对此进行了调查,“+”并没有太大的区别——它更多的是让工具检查你没有引入错别字但不影响输出。【参考方案4】:

解决了。在我的安卓设备上卸载然后安装应用程序就可以了。我以后会注意的

【讨论】:

如果您投反对票,请发表评论。这就是我的解决方案。

以上是关于如何一次隐藏多个视图?的主要内容,如果未能解决你的问题,请参考以下文章

在 iPad 上隐藏 UIActionSheet

如何快速隐藏和取消隐藏具有高度的视图?

如何防止多个子视图控制器一次加载?

如何将 loginViewFetchedUserInfo: 中的信息一次传递给多个视图

单击按钮,在主视图中的 foreach 语句中一次显示/隐藏部分视图结果

从 RecyclerView Adapter Android 隐藏和显示多个视图持有者