Android:看不见和消失之间的区别?


476

invisiblegone“视图”可见性状态和有什么区别?


26
当视图消失时,这意味着它不会在布局中占用任何空间。当它不可见时,它将在布局中占据必要的空间,但您只是看不到它。
DroidBender 2012年

Answers:


708

无形:

该视图是不可见的,但仍会占用空间以进行布局。

消失了:

该视图是不可见的,并且它不占用任何空间用于布局目的。


113
看起来类似于display:nonevisibility:hidden在HTML / CSS中:-)
anishsane 2014年

或隐藏和折叠在Wpf XAML中
juliushuck

1
如果它是不可见的,会不会点击它也被禁用?
Kuldeep Yadav

1
@KuldeepYadav是的,它将消失不见。
史蒂夫·莫雷兹

1
仅适用于将来好奇的读者:即使列表/网格视图不可见,我们仍然可以在其上使用performItemClick。
kiranking

264

文档中您可以说

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

View.INVISIBLE此视图是不可见的,但仍会占用空间以进行布局。


让我们用一些图片来阐明这个想法。

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

在此处输入图片说明

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

在此处输入图片说明

并且当您将按钮2的可见性设置为走了(View.GONE)时,输出将是

在此处输入图片说明

希望这能消除您的疑虑。


4
这个想法是否需要清除?仅凭解释,对我来说似乎很清楚。
John Dvorak 2015年

16
@JanDvorak :)太好了!对于您的问题,我没有答案。如果您认为对于所有用户来说都很清楚,那么接受的答案应该是评论,并带有文档站点的链接。我对么?
Pankaj Kumar

如果我将其用于edittext怎么办。是否有可能从edittext获取值?
Ashish

32

对于ListView或GridView,可见性最初设置为

无形:

适配器的getView()函数称为

消失了:

适配器的getView()函数未调用,从而避免了不必要时加载视图


10

看不见:
必须绘制视图,这需要时间。

消失:
不必绘制视图。


8
未绘制视图,已对其进行了测量和布局。
cyroxis

@cyroxis也许他/她的意思是ondraw方法!
David

7

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

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

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


是的,您是对的,它仅在某些情况下才有效GONE
Suraj Bahadur

4

每次编译程序时都使它消失,则组件将初始化,这意味着您要从布局中删除该组件,而使它不可见时,组件将在布局中占用相同的空间,但每次都不需要初始化时。

如果设置Visibility = Gone,则必须初始化组件。

例如Button _mButton = new Button(this);

_mButton =(按钮)findViewByid(R.id.mButton);

因此与“可见性=不可见”相比,它将花费更多时间。



0

View.GONE =该视图将不显示,其余视图将不考虑其存在

View.INVISIBLE =该视图将不会显示,但会在布局中占用其分配的空间

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.