Android: відмінність між невидимим і зниклим?


476

У чому різниця між статусом видимості invisibleта goneдля нього?


26
Коли подання немає, це означає, що він не займає місця в макеті. Коли він невидимий, він займе необхідне приміщення в макеті, але ви просто не бачите його.
DroidBender

Відповіді:


708

НЕВИДИМИ:

Цей погляд невидимий, але він все ще займає місце для цілей компонування.

GONE:

Цей погляд невидимий, і він не займає місця для цілей компонування.


113
Схоже на display:none& & visibility:hiddenHTML / CSS :-)
anishsane

Або до прихованого і згорнутого в Wpf XAML
липняка

1
Якщо він невидимий, натискання на нього також буде відключено?
Kuldeep Yadav

1
@KuldeepYadav так, це буде і в минулому, і в невидимому.
steve moretz

1
тільки для майбутніх цікавих читачів: ми все ще можемо використовувати performItemClick у списку / перегляді сітки, навіть це непомітно.
kiranking

264

З документації ви можете сказати це

View.GONE Цей вид невидимий, і він не займає місця для цілей компонування.

View.INVISIBLE Цей вид невидимий, але він все ще займає місце для цілей компонування.


Дозволяємо зрозуміти ідею з деякими картинками.

Припустимо, що у вас є три кнопки, як нижче

введіть тут опис зображення

Тепер якщо ви встановите видимість кнопки два як невидиму ( View.INVISIBLE), то вихід буде

введіть тут опис зображення

І коли ви встановите видимість кнопки два як gone ( View.GONE), вихід буде

введіть тут опис зображення

Сподіваюся, це очистить ваші сумніви.


4
Чи потрібно ідею очистити? Мені це здається досить зрозумілим лише з пояснення.
Джон Дворак

16
@JanDvorak :) Чудово! Я не маю відповіді на ваше запитання. Якщо ви вважаєте, що це було дуже зрозуміло для всіх користувачів, то прийнята відповідь має бути коментарем і мати посилання на сайт документації. Я прав?
Панкай Кумар

Що робити, якщо я використовую його для редагування тексту. чи можна отримати значення з edittext?
Ашиш

32

Для ListView або GridView існує інша різниця, коли видимість спочатку встановлена ​​на

НЕВИДИМИ:

Функція getView () адаптера називається

GONE:

Функція getView () адаптера не дзвонила, тим самим запобігаючи завантаженню поглядів, коли це не потрібно


10

НЕВИДИМИЙ:
Погляд повинен бути намальований, і це потребує часу.

GONE:
Вид не повинен бути намальований.


8
Вид не намальований, він вимірюється і викладається.
цироксис

@cyroxis, можливо, він / вона означає метод ondraw!
Девід

7

Я хотів би додати до правильних і успішних відповідей, що якщо ви ініціалізуєте подання з видимістю як View.GONE, то перегляд можна було б не ініціалізувати, і ви отримаєте деякі випадкові помилки.

Наприклад, якщо ви ініціалізуєте макет як View.GONEі потім ви намагаєтеся запустити анімацію, з мого досвіду я працював анімацією випадково. Іноді так, іноді ні.

Отже, перш ніж обробляти (змінювати розмір, переміщувати, будь-який) вигляд, ви повинні запустити його як View.VISIBLEабо View.INVISIBLEзробити його (намалювати) на екрані, а потім обробити його.


Так, ви маєте рацію. Це працює лише іноді, коли поглядGONE
Suraj Bahadur

4

коли ви робите це зникло щоразу, коли компіляція програми компонент ініціалізується, це означає, що ви видаляєте компонент з макета, і коли ви робите його невидимим, компонент займе той самий простір у макеті, але кожен раз, коли вам не потрібно ініціалізувати його .

якщо ви встановите Visibility = Gone, вам доведеться ініціалізувати компонент ..

наприклад, кнопка _mButton = нова кнопка (це);

_mButton = (Кнопка) findViewByid (R.id.mButton);

тому це займе більше часу порівняно з видимістю = невидимою.


4
  • View.INVISIBLE -> Перегляд невидимий, але він займе деякий простір у макеті

  • View.GONE -> Перегляд не видно, і він не займе місця в макеті


0

View.GONE = Перегляд не відображатиметься, а решта переглядів не враховуватиме його існування

View.INVISIBLE = Перегляд не відображатиметься, але він займе відведений простір у макеті

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.