Android: różnica między niewidzialnością a odejściem?


476

Jaka jest różnica między statusem widoczności invisiblei gonedla niego?


26
Brak widoku oznacza, że ​​nie zajmuje on miejsca w układzie. Gdy jest niewidoczny, zajmie niezbędne miejsce w układzie, ale po prostu go nie widzisz.
DroidBender

Odpowiedzi:


708

NIEWIDOCZNY:

Ten widok jest niewidoczny, ale nadal zajmuje miejsce na potrzeby układu.

ODSZEDŁ:

Ten widok jest niewidoczny i nie zajmuje miejsca na układ.


113
Wygląda analogicznie do display:none& visibility:hiddenw HTML / CSS :-)
anishsane

Lub do Hidden and Collapsed in Wpf XAML
juliushuck

1
Jeśli jest niewidoczny, czy kliknięcie go jest również wyłączone?
Kuldeep Yadav

1
@KuldeepYadav tak, będzie nieobecny i niewidoczny.
steve moretz

1
tylko dla przyszłych ciekawskich czytelników: nadal możemy używać performItemClick w widokach listy / siatki, nawet jeśli jest to niewidoczne.
kiranking

264

Z dokumentacji można to powiedzieć

View.GONE Ten widok jest niewidoczny i nie zajmuje miejsca dla celów układu.

View.INVISIBLE Ten widok jest niewidoczny, ale nadal zajmuje miejsce dla celów układu.


Pozwala wyjaśnić ten pomysł za pomocą kilku zdjęć.

Załóżmy, że masz trzy przyciski, jak poniżej

wprowadź opis zdjęcia tutaj

Teraz, jeśli ustawisz widoczność przycisku drugiego jako niewidocznego ( View.INVISIBLE), wtedy wynik będzie

wprowadź opis zdjęcia tutaj

A kiedy ustawisz widoczność przycisku drugiego jako nieistniejącego ( View.GONE), wtedy wynik będzie

wprowadź opis zdjęcia tutaj

Mam nadzieję, że rozwiąże to twoje wątpliwości.


4
Czy pomysł musi zostać wyjaśniony? Z wyjaśnień wydaje mi się to wystarczająco jasne.
John Dvorak,

16
@JanDvorak :) Świetnie! Nie mam odpowiedzi na twoje pytanie. Jeśli uważasz, że było to bardzo jasne dla wszystkich użytkowników, wówczas zaakceptowaną odpowiedzią powinien być komentarz i link do strony z dokumentacją. Mam rację?
Pankaj Kumar,

co jeśli użyję go do edycji tekstu. czy można uzyskać wartość z edittext?
Ashish

32

W przypadku ListView lub GridView istnieje inna różnica, gdy początkowo widoczność jest ustawiona na

NIEWIDOCZNY:

Wywołano funkcję getView () adaptera

ODSZEDŁ:

Funkcja getView () adaptera nie została wywołana, co zapobiega ładowaniu widoków, gdy jest to niepotrzebne


10

NIEWIDOCZNY:
Widok musi zostać narysowany i wymaga czasu.

GONE:
Widok nie musi być rysowany.


8
Widok nie jest rysowany, jest mierzony i rozmieszczany.
cyroxis

@cyroxis może on / ona oznacza metodę ondraw!
David

7

Chciałbym dodać do właściwych i udanych odpowiedzi, że jeśli zainicjujesz widok z widocznością jako View.GONE , widok mógł nie zostać zainicjowany i otrzymasz kilka przypadkowych błędów.

Na przykład jeśli zainicjujesz układ jako View.GONE a następnie próbujesz rozpocząć animację, z mojego doświadczenia wynika, że ​​moja animacja działa losowo. Czasem tak, czasem nie.

Więc przed obsługą (zmiana rozmiaru, przesuwanie, cokolwiek) widoku, musisz go zainicjować jako View.VISIBLElub View.INVISIBLEwyrenderować (narysować) na ekranie, a następnie go obsłużyć.


Tak, masz rację, Działa tylko czasami, gdy widok jestGONE
Suraj Bahadur,

4

kiedy go znikasz przy każdej kompilacji programu, komponent jest inicjalizowany, co oznacza, że ​​usuwasz komponent z układu, a gdy uczynisz go niewidocznym, zajmie to samo miejsce w układzie, ale za każdym razem nie musisz go inicjować .

jeśli ustawisz Visibility = Gone, musisz zainicjować komponent .. jak

np. Button _mButton = new Button (this);

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

więc zajmie to więcej czasu w porównaniu do Widoczności = niewidoczny.


4
  • View.INVISIBLE -> Widok jest niewidoczny, ale zajmie trochę miejsca w układzie

  • View.GONE -> Widok nie jest widoczny i nie będzie zajmował żadnego miejsca w układzie


0

View.GONE = Widok nie zostanie wyświetlony, a reszta widoków nie uwzględni jego istnienia

View.INVISIBLE = Widok się nie pokaże, ale zajmie przypisane mu miejsce w układzie

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.