ChatGPT解决这个技术问题 Extra ChatGPT

Android:隐形和消失的区别?

查看可见性状态的 invisiblegone 有什么区别?

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

I
Iñigo

无形的:

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

消失:

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


看起来类似于 display:none & visibility:hidden 在 HTML/CSS 中 :-)
或者在 Wpf XAML 中隐藏和折叠
如果它是不可见的,单击它是否也会被禁用?
@KuldeepYadav 是的,它会消失和看不见。
只是为了未来好奇的读者:我们仍然可以在列表/网格视图上使用 performItemClick,即使它是不可见的。
P
Pankaj Kumar

Documentation 你可以说

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

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

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

https://i.stack.imgur.com/pScps.png

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

https://i.stack.imgur.com/JYOkP.png

当您将按钮二的可见性设置为消失 (View.GONE) 时,输出将是

https://i.stack.imgur.com/iM8zc.png

希望这能消除您的疑虑。


这个想法需要清除吗?仅从解释对我来说似乎就足够清楚了。
@JanDvorak :) 太好了!你的问题我没有答案。如果您认为这对所有用户来说都非常清楚,那么接受的答案应该是评论并具有文档站点的链接。我对么?
如果我用它来编辑文本怎么办。是否可以从 edittext 获取值?
您的答案比公认的答案更好。
图片胜于雄辩
m
mes

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

无形的:

适配器的 getView() 函数调用

消失:

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


t
twlkyao

INVISIBLE:必须绘制视图并且需要时间。

GONE:不必绘制视图。


视图不是绘制出来的,而是经过测量和布局的。
@cyroxis 也许他/她的意思是 ondraw 方法!
R
Rafael Ruiz Muñoz

我想补充一下正确且成功的答案,如果您初始化一个可见性为 View.GONE 的视图,则该视图可能尚未初始化,您会收到一些随机错误。

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

因此,在处理(调整大小、移动等)视图之前,您必须将其初始化为 View.VISIBLEView.INVISIBLE 以在屏幕上呈现(绘制)它,然后对其进行处理。


是的,你是对的,它仅在视图为 GONE 时才有效
k
kuldeep zala

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

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

例如 Button _mButton = new Button(this);

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

因此与可见性 = 不可见相比,它需要更多时间。


Y
Yugandhar Vadlamudi

View.INVISIBLE->View 是不可见的,但是在布局中会占用一些空间

View.GONE->视图不可见,不会占用布局空间


M
MKH

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

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