Android: разница между невидимым и ушедшим?


477

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


26
Когда вид исчез, это означает, что он не занимает места в макете. Когда он невидим, он займет необходимое место в макете, но вы просто не видите его.
DroidBender

Ответы:


709

INVISIBLE:

Это представление невидимо, но все же занимает место для макета.

УШЕЛ:

Это представление невидимо, и оно не занимает места для макета.


113
Похоже на display:none& visibility:hiddenв HTML / CSS :-)
anishsane

Или к Скрытым и Свернутым в Wpf XAML
juliushuck

1
Если он невидим, нажмете на него тоже отключен?
Кулдип Ядав

1
@KuldeepYadav да, он будет и ушел, и невидим.
Стив Моретц

1
только для будущих любопытных читателей: мы все еще можем использовать executeItemClick для представлений списка / сетки, даже если они невидимы.
kiranking

264

Из документации можно сказать, что

View.GONE Этот вид невидим, и он не занимает места для макета.

View.INVISIBLE Это представление невидимо, но все же занимает место для макета.


Давайте проясним идею с некоторыми картинками.

Предположим, что у вас есть три кнопки, как показано ниже

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

Теперь, если вы установите видимость Button Two как invisible ( View.INVISIBLE), тогда вывод будет

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

И когда вы установите видимость Button Two как пошел ( View.GONE), то вывод будет

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

Надеюсь, это очистит ваши сомнения.


4
Нужно ли прояснить идею? Это кажется достаточно ясным для меня только из объяснения.
Джон Дворжак

16
@JanDvorak :) Отлично! У меня нет ответа на ваш вопрос. Если вы считаете, что это было очень понятно для всех пользователей, то принятым ответом должен быть комментарий и ссылка на сайт документации. Я прав?
Панкадж Кумар

Что делать, если я использую его для редактирования текста. Можно ли получить значение из текста редактирования?
Ашиш

32

Для ListView или GridView есть другое отличие, когда видимость изначально установлена ​​на

INVISIBLE:

Вызвана функция getView () адаптера

УШЕЛ:

Функция getView () адаптера не вызывалась, что предотвращает загрузку представлений, когда это не нужно


10

НЕВИДИМ:
представление должно быть нарисовано, и это требует времени.

Ушли:
представление не должно быть нарисовано.


8
Вид не нарисован, он измерен и выложен.
цироксис

@ cyroxis, возможно, он / она имеет в виду метод ondraw!
Дэвид

7

Я хотел бы добавить к правильным и успешным ответам, что если вы инициализируете представление с видимостью as View.GONE, представление могло быть не инициализировано, и вы получите некоторые случайные ошибки.

Например, если вы инициализируете макет как, View.GONEа затем пытаетесь запустить анимацию, из моего опыта моя анимация работает случайным образом. Иногда да, иногда нет.

Таким образом, перед обработкой (изменением размера, перемещением и т. Д.) Представления вы должны инициировать его как View.VISIBLEили View.INVISIBLEотрисовать (нарисовать) на экране, а затем обработать его.


Да, вы правы, Это работает только иногда, когда GONE
Сурадж Бахадур

4

когда вы делаете это Унесенным каждый раз при компиляции программы, компонент инициализируется, что означает, что вы удаляете компонент из макета, а когда вы делаете его невидимым, компонент занимает то же место в макете, но каждый раз, когда вам не нужно его инициализировать ,

если вы установите Visibility = Gone, то вы должны инициализировать компонент .. как

например, кнопка _mButton = новая кнопка (это);

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

так что это займет больше времени по сравнению с Visibility = invisible.


4
  • View.INVISIBLE -> View невидим, но он будет занимать некоторое место в макете

  • View.GONE -> Вид не виден и не будет занимать места в макете


0

View.GONE = Представление не будет отображаться, а остальные представления не будут учитывать его существование.

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.