Android:View.GONE和View.INVISIBLE的区别是什么?

548
View.INVISIBLEView.GONE 在 View 的可见性状态方面有什么区别?

35
当一个视图(View)被隐藏(gone),意味着它在布局中不占据任何空间。当它是不可见(invisible)时,它将在布局中占据必要的空间,但你只是看不到它。 - DroidBender
8个回答

831

不可见:

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

已消失:

这个视图是不可见的,对于布局来说不会占用任何空间。


136
看起来类似于HTML/CSS中的display:nonevisibility:hidden :-) - anishsane
3
或者在 Wpf XAML 中隐藏和折叠 - juliushuck
2
如果它是不可见的,那么点击它也被禁用了吗? - Kuldeep Yadav
3
@KuldeepYadav 是的,它将同时在离线和隐身模式下。 - Steve Moretz
2
仅供未来好奇的读者参考:即使列表/网格视图不可见,我们仍然可以使用performItemClick。 - kiranking
显示剩余2条评论

316

根据文档,我们可以得知:

View.GONE:视图不可见,对于布局来说也不占据任何空间。

View.INVISIBLE:视图不可见,但对于布局来说会占据相应的空间。


通过一些图片来清晰展示这个概念。

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

enter image description here

现在,如果您将第二个按钮的可见性设置为不可见(View.INVISIBLE),那么输出结果将会是:

enter image description here

而当您将第二个按钮的可见性设置为消失(View.GONE)时,输出结果将会是:

enter image description here

希望这可以解开您的疑惑。


5
需要澄清这个想法吗?从解释中看来,对我而言已经足够清晰了。 - John Dvorak
22
@JanDvorak :) 太好了!我对你的问题没有答案。如果您认为这对所有用户非常清晰,则接受的答案应该是一条评论,并且应该有文档网站的链接。我的理解是否正确? - Pankaj Kumar
如果我用它来编辑文本框,能否从文本框中获取值? - Ashish
1
你的回答比被采纳的回答更好。 - Samudra Ganguly
1
图片胜过千言万语。 - Gaju Kollur

35
针对 ListView 或 GridView 控件,有一个不同之处,当可见性初始设置为 INVISIBLE 时:
适配器的 getView() 函数会被调用。
当可见性初始设置为 GONE 时:
适配器的 getView() 函数不会被调用,从而阻止了那些不必要加载视图。

10
我想要在正确和成功的答案中补充一点,如果你用 View.GONE 初始化一个视图,那么这个视图可能没有被初始化,你将会得到一些随机错误。
例如,如果你将一个布局初始化为 View.GONE,然后尝试启动动画,根据我的经验,我的动画有时候会随机工作。有时可以,有时不行。
因此,在处理(调整大小、移动等)视图之前,你必须将它初始化为 View.VISIBLEView.INVISIBLE 以在屏幕上呈现(绘制)它,然后再进行处理。

是的,你说得对,当视图为“GONE”时,它只有时候能工作。 - Suraj Bahadur

10

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

GONE:
视图不需要被绘制。


11
视图不是被绘制出来的,而是被测量和布局的。 - cyroxis
1
@cyroxis 或许他/她指的是 ondraw 方法! - David

4
每次编译程序时,当您将其设置为"Gone"时,组件将被初始化,这意味着您正在从布局中删除组件。如果您将组件设置为"invisible",则它将占用相同的布局空间,但您不需要每次都进行初始化。如果您将Visibility设置为Gone,则必须对组件进行初始化,例如:
Button _mButton = new Button(this);
_mButton = (Button)findViewByid(R.id.mButton);

相比于可见性为invisible,这需要更多的时间。


4
  • 视图的属性为View.INVISIBLE时,该视图在布局中虽然不可见,但仍将占据一定空间。

  • 视图的属性为View.GONE时,该视图在布局中既不可见,也不会占据任何空间。


0

View.GONE - 视图不会显示,其他视图也不会考虑它的存在。

View.INVISIBLE - 视图不会显示,但是它会在布局中占据其分配的空间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接