Android:无形之间的区别和走了吗?

查看可见性状态, invisiblegone了什么?

无形:

这个视图是不可见的,但是仍然占用空间用于布局目的。

GONE:

这个视图是不可见的,它不需要任何空间来布局。

从文档你可以这样说

View.GONE这个视图是不可见的,它不占用任何空间用于布局。

View.INVISIBLE这个视图是不可见的,但它仍然占用空间用于布局。


让我们用一些图片清除这个想法。

假设您有三个button,如下所示

在这里输入图像描述

现在,如果将Button Two的可见性设置为不可见( View.INVISIBLE ),则输出将为

在这里输入图像描述

而当你设置button二的可见性已经消失( View.GONE ),那么输出将是

在这里输入图像描述

希望这会消除你的疑虑。

对于ListView或GridView,当可见性最初设置为时,还有另一个区别

无形:

适配器的getView()函数被调用

GONE:

适配器的getView()函数没有调用,因此在不需要的时候阻止视图加载

无形:
这个观点必须要画出来,需要时间。

GONE:
这个观点不一定要画出来。

我想添加正确的和成功的答案,如果你初始化一个视图的可视性为View.GONE ,视图可能已经没有初始化,你会得到一些随机错误。

例如,如果初始化一个布局为View.GONE ,然后尝试开始animation,那么从我的经验来看,我的animation会随机地工作。 有时是的,有时没有。

因此,在处理(resize,移动任何视图)之前,必须View.VISIBLE其初始化为View.VISIBLEView.INVISIBLE以便在屏幕上呈现它(绘制它),然后对其进行处理。

  • View.INVISIBLE – >视图是不可见的,但它将占用布局中的一些空间

  • View.GONE – >视图不可见,不会占用布局中的任何空间

当你每次编译程序时,组件都会被初始化,这意味着你从布局中删除了组件,当你使组件不可见时,它将在布局中占用相同的空间,但是每次你不需要初始化它。

如果你设置Visibility = Gone,那么你必须初始化组件

例如Button _mButton = new Button(this);

_mButton =(Button)findViewByid(R.id.mButton);

所以与可见性=不可见相比,需要更多的时间。