(Android)布局不会在setVisibility(view.GONE)之后重绘?

时间:2012-01-14 17:02:43

标签: android android-linearlayout

在应用程序中我有:

LinearLayout linearLayout2 = (LinearLayout) findViewById(R.id.cvLinearLayout2);

之后

linearLayout2.setVisibility(View.GONE);

我找不到将linearLayout2带回来的方法。

尝试了一切:

  linearLayout2.setVisibility(View.VISIBLE);
  linearLayout2.bringToFront();
  linearLayout2.getParent().requestLayout();
  linearLayout2.forceLayout();
  linearLayout2.requestLayout();
  linearLayout2.invalidate();

但没有结果。 linearLayout2有一个父linearLayout1,所以我也试过了:

  linearLayout1.requestLayout();
  linearLayout1.invalidate();

仍然没有结果。 linearLayout2停留GONE。 在我的应用程序中,我需要移开linearLayout,然后,过一会儿再次重绘它。请帮忙。

2 个答案:

答案 0 :(得分:9)

View.GONE将从屏幕中删除视图,并且视图占用的空间将被释放到屏幕上的其他视图。所以,“GONE”观点无法回归。你需要重装它。

如果您想保留空间,可以使用View.INVISIBLE。现在不删除视图,而是隐藏视图并显示空白区域。

在简单的插图中,您有以下设置:

ABCD

致电B.setVisibility(View.INVISIBLE);后,您将拥有:

A CD

但是在致电B.setVisibility(View.GONE);后,你会得到:

ACD

答案 1 :(得分:3)

将视图的可见性设置为GONE不应影响它使用方法setVisibility(View.VISIBLE)“返回”的能力

例如,我在我的一个应用中使用了此代码:

public void onCheckedChanged(CompoundButton checkBox, boolean isChecked{
    if(checkBox == usesLocationCheckBox)
    {
        View view = findViewById(R.id.eventLocationOptions);
        if(isChecked)
        {
            view.setVisibility(View.VISIBLE);
            usesTimeCheckBox.setEnabled(false);
        }
        if(!isChecked)
        {
            view.setVisibility(View.GONE);
            usesTimeCheckBox.setEnabled(true);
        }
    }}

它完美无缺。您的程序正在执行的其他一些代码必须负责。使用相关代码编辑您的帖子,我们可以为您提供更好的答案。