如何一次隐藏多个视图?
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.INVISIBLE
或View.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】:解决了。在我的安卓设备上卸载然后安装应用程序就可以了。我以后会注意的
【讨论】:
如果您投反对票,请发表评论。这就是我的解决方案。以上是关于如何一次隐藏多个视图?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 loginViewFetchedUserInfo: 中的信息一次传递给多个视图