Android:隐形和消失之间的区别?

Rob*_*Rob 449 android xml-attribute android-xml

View可见性状态invisible和有什么区别gone

Iñi*_*igo 679

无形:

此视图不可见,但它仍占用布局空间.

GONE:

此视图不可见,并且不需要任何空间用于布局.

  • 看起来类似于HTML/CSS中的`display:none`&`visibility:hidden` :-) (108认同)
  • @KuldeepYadav 是的,它将消失且不可见。 (3认同)
  • 仅供未来好奇的读者使用:即使它不可见,我们仍然可以在列表/网格视图上使用performItemClick。 (3认同)
  • 或者在 Wpf XAML 中隐藏和折叠 (2认同)
  • 如果它是不可见的,点击它是否也会被禁用? (2认同)

Pan*_*mar 252

文档中你可以这么说

View.GONE此视图不可见,并且不需要任何空间用于布局.

View.INVISIBLE此视图不可见,但它仍占用布局空间.


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

假设您有三个按钮,如下所示

在此输入图像描述

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

在此输入图像描述

当你将Button Two的可见性设置为off(View.GONE)时,输出将是

在此输入图像描述

希望这会清除你的疑虑.

  • @JanDvorak :)好极了!我对你的问题没有答案.如果您认为这对所有用户都非常清楚,那么接受的答案应该是评论并且具有文档站点的链接.我对么? (15认同)
  • 这个想法是否需要清除?从解释来看,这对我来说似乎很清楚. (4认同)

mes*_*mes 31

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

无形:

调用适配器的getView()函数

GONE:

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


twl*_*yao 10

INVISIBLE:
必须绘制视图,这需要时间.

GONE:
不必绘制视图.

  • 没有绘制视图,它是测量和布局的. (7认同)

Raf*_*ñoz 6

我想添加到正确且成功的答案中,如果您以可见性初始化视图View.GONE,则该视图可能尚未初始化,并且会出现一些随机错误。

例如,如果您将布局初始化为View.GONE,然后尝试启动动画,根据我的经验,我的动画会随机运行几次。有时是,有时不是。

因此,在处理(调整大小,移动任何位置)视图之前,必须先将其初始化View.VISIBLEView.INVISIBLE在屏幕中进行渲染(绘制),然后再进行处理。


kul*_*ala 5

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

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

例如 Button _mButton = new Button(this);

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

因此与 Visibility = invisible 相比,它需要更多时间。