Android: diferença entre invisível e desaparecida?


477

Qual é a diferença entre invisiblee gonepara o status de visibilidade da exibição?


26
Quando uma Visualização desaparece, significa que não ocupa espaço no layout. Quando está invisível, ele ocupa o espaço necessário em um layout, mas você simplesmente não o vê.
DroidBender

Respostas:


709

INVISÍVEL:

Essa visualização é invisível, mas ainda ocupa espaço para fins de layout.

FOI:

Essa visualização é invisível e não ocupa espaço para fins de layout.


113
Looks como análoga a display:none& visibility:hiddenem HTML / CSS :-)
anishsane

Ou para Hidden and Collapsed no Wpf XAML
juliushuck

1
Se estiver invisível, clique nele também está desativado?
Kuldeep Yadav

1
@KuldeepYadav sim, ele desapareceu e ficou invisível.
Steve moretz 06/02/19

1
apenas para futuros leitores curiosos: ainda podemos usar performItemClick nas visualizações de lista / grade, mesmo que sejam invisíveis.
kiranking

264

Na documentação, você pode dizer que

View.GONE Esta visualização é invisível e não ocupa espaço para propósitos de layout.

Visão.INVISÍVEL Esta visão é invisível, mas ainda ocupa espaço para fins de layout.


Vamos esclarecer a idéia com algumas fotos.

Suponha que você tenha três botões, como abaixo

insira a descrição da imagem aqui

Agora, se você definir a visibilidade do Botão Dois como invisível ( View.INVISIBLE), a saída será

insira a descrição da imagem aqui

E quando você define a visibilidade do Botão Dois como desapareceu ( View.GONE), a saída será

insira a descrição da imagem aqui

Espero que isso esclareça suas dúvidas.


4
A ideia precisa ser apagada? Parece claro o suficiente para mim apenas a partir da explicação.
John Dvorak

16
@JanDvorak :) Great! Não tenho resposta para sua pergunta. Se você acha que isso ficou muito claro para todos os usuários, a resposta aceita deve ser um comentário e ter um link para o site de documentação. Estou correcto?
Pankaj Kumar

e se eu usá-lo para o edittext. é possível obter o valor do edittext?
Ashish

32

Para ListView ou GridView, há outra diferença, quando a visibilidade é inicialmente definida como

INVISÍVEL:

A função getView () do adaptador chamada

FOI:

A função getView () do adaptador não foi chamada, impedindo o carregamento de visualizações, quando é desnecessário


10

INVISÍVEL:
A vista precisa ser desenhada e leva tempo.

GONE:
A vista não precisa ser desenhada.


8
A vista não é desenhada, é medida e definida.
Cyroxis

@cyroxis talvez ele / ela queira dizer método ondraw!
David

7

Gostaria de acrescentar às respostas corretas e bem-sucedidas que, se você inicializar uma visualização com visibilidade como View.GONE , a exibição pode não ter sido inicializada e você receberá alguns erros aleatórios.

Por exemplo, se você inicializar um layout View.GONEe tentar iniciar uma animação, pela minha experiência, minha animação funcionará aleatoriamente. Às vezes sim, às vezes não.

Portanto, antes de manipular (redimensionar, mover, qualquer que seja) uma visão, você deve iniciá-la como View.VISIBLEou View.INVISIBLErenderizá-la (desenhá-la) na tela e manipular.


Sim, você está certo, trabalhando apenas algumas vezes, quando vista éGONE
Suraj Bahadur

4

Quando você o faz Toda vez que a compilação do programa é inicializada, o componente é inicializado, o que significa que você está removendo o componente do layout e quando o torna invisível, o componente ocupa o mesmo espaço no layout, mas toda vez que você não precisa inicializá-lo .

se você definir Visibility = Gone, precisará inicializar o componente.

por exemplo, Button _mButton = new Button (this);

_mButton = (Botão) findViewByid (R.id.mButton);

portanto, levará mais tempo em comparação com Visibilidade = invisível.


4
  • View.INVISIBLE -> O View é invisível, mas ocupará algum espaço no layout

  • View.GONE -> A View não está visível e não ocupará nenhum espaço no layout


0

View.GONE = A visualização não será exibida e o restante das visualizações não levará em consideração sua existência

View.INVISIBLE = A visualização não será exibida, mas ocupará o espaço atribuído no layout

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.