What is the difference between View.INVISIBLE
and View.GONE
for the View visibility status?
-
35When a View is gone, it means it doesn't take any space in the layout. When it is invisible, it will take the necessary room in a layout but you just don't see it. – DroidBender Jul 19 '12 at 08:16
8 Answers
INVISIBLE:
This view is invisible, but it still takes up space for layout purposes.
GONE:
This view is invisible, and it doesn't take any space for layout purposes.

- 12,723
- 2
- 31
- 31
-
135Looks like analogous to `display:none` & `visibility:hidden` in HTML/CSS :-) – anishsane Jan 30 '14 at 06:18
-
3
-
2
-
3
-
2just for future curious readers: we can still use performItemClick on list/grid views even it is invisible. – kiranking Feb 22 '19 at 21:12
-
1
-
Note that INVISIBLE still makes the view clickable; it is the same as VISIBLE but without being shown. – Amr Salah Aug 12 '22 at 05:27
From Documentation you can say that
View.GONE This view is invisible, and it doesn't take any space for layout purposes.
View.INVISIBLE This view is invisible, but it still takes up space for layout purposes.
Lets clear the idea with some pictures.
Assume that you have three buttons, like below
Now if you set visibility of Button Two as invisible (View.INVISIBLE
), then the output will be
And when you set visibility of Button Two as gone (View.GONE
) then the output will be
Hope this will clear your doubts.

- 81,967
- 29
- 167
- 186
-
5Does the idea need to be cleared? It seems clear enough for me just from the explanation. – John Dvorak Mar 12 '15 at 05:59
-
22@JanDvorak :) Great! I have no answer for your question. If you think this was very clear for all users, then the accepted answer should be a comment and have a link of documentation site. Am I correct? – Pankaj Kumar Mar 12 '15 at 06:09
-
what if i use it for edittext. is it possible to get the value from edittext ? – Ashish Jul 16 '19 at 11:28
-
1
-
1
For ListView or GridView there is an another difference, when visibility initially set to
INVISIBLE:
Adapter's getView() function called
GONE:
Adapter's getView() function didn't call, thus preventing views to load, when it is unnecessary

- 3,581
- 29
- 28
INVISIBLE:
The view has to be drawn and it takes time.
GONE:
The view doesn't have to be drawn.

- 14,302
- 7
- 27
- 44
I'd like to add to the right and successful answers, that if you initialize a view with visibility as View.GONE
, the view could have been not initialized and you will get some random errors.
For example if you initialize a layout as View.GONE
and then you try to start an animation, from my experience I've got my animation working randomly times. Sometimes yes, sometimes no.
So before handling (resizing, move, whatever) a view, you have to init it as View.VISIBLE
or View.INVISIBLE
to render it (draw it) in the screen, and then handle it.

- 5,333
- 6
- 46
- 92
-
Yes, you are right, It working only sometimes when view is `GONE` – Suraj Bahadur Jul 17 '19 at 07:58
when you make it Gone every time of compilation of the program the component gets initialized which means you are removing the component from the layout and when you make it invisible the component it will take the same space in the layout but every time you don't need to initialize it.
if you set Visibility=Gone then you have to initialize the component..like
eg
Button _mButton = new Button(this);
_mButton = (Button)findViewByid(R.id.mButton);
so it will take more time as compared to Visibility = invisible.

- 7,009
- 4
- 25
- 38

- 57
- 3
- 12
View.INVISIBLE->The View is invisible but it will occupy some space in layout
View.GONE->The View is not visible and it will not occupy any space in layout

- 111
- 1
- 5