Como e porque usar o Android Visibility Listeners

A UI Android é construída a partir de Views, e em uma aplicação regular, geralmente há vários deles. Para descobrir para qual View o usuário está olhando atualmente, você precisa instalar Visibility Listeners.

Ler abaixo para descobrir as diferentes opções que você tem para identificar o status de visibilidade de um View.

Para que nossos ouvintes funcionem, precisamos primeiro ter certeza de que nossa View é encontrada na hierarquia de layout. Existem duas formas de isto acontecer:

  1. A sua View já faz parte do seu layout como está definida num ficheiro XML
  2. Você criou uma View dinamicamente, e precisa adicioná-la usando o método addView
child é a View que você quer adicionar e LayoutParams são os parâmetros do layout(I.E. width, and height)

A View’s visibility status is of Integer type and can have one of three options:

  1. VISÍVEL (0) – A Vista é visível para o usuário
  2. INVISÍVEL (4) – A Vista é invisível para o usuário, mas ainda ocupa espaço no layout
  3. FEITO (8) – A Vista é invisível, e não ocupa espaço no layout

Após dentro da nossa hierarquia de layout, existem algumas opções nativas para nos ajudar a saber quando a visibilidade da nossa Vista foi alterada.

sobreVisibilidadeMudado

Este método é acionado quando a visibilidade da vista ou de um ancestral da vista mudou. O estado da visibilidade é encontrado dentro do parâmetro de visibilidade.

onWindowVisibilityChanged

Este método é acionado quando a janela contendo a nossa Vista mudou a sua visibilidade. Isto não garante que a janela em que sua View está é visível para o usuário, pois ela pode estar obscurecida por outra janela.

Visibility Listeners In Action

Para ver estes dois ouvintes em ação, vamos criar um projeto simples. Teremos um LinearLayout com um TextView e um botão. Vamos fazer com que os botões em action de clique adicionem nossa visão personalizada ao layout.

Nossa visualização personalizada:

E, finalmente, o código em nossa MainActivity:

Agregamos um OnClick Listener ao botão

Quando executamos a aplicação e pressionamos o botão que obtemos:

Pode ver dentro do Logcat que os ouvintes são chamados quando a nossa vista entra em vista

Pode obter o projecto de amostra aqui.

ViewTreeObserver

Este é um objeto nativo que tem uma grande variedade de ouvintes que são notificados de várias mudanças de visibilidade para a árvore de visualização. Alguns proeminentes para serem notados são:

  • OnGlobalLayoutListener
  • OnWindowAttachListener
  • OnWindowFocusChangeListener

Para anexar um ViewTreeObserver, você precisa fazer o seguinte:

removeOnGlobalLayoutListener requer API > 15

A linha linearLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this) garante que o ouvinte só será chamado uma vez. Se você quiser continuar escutando as mudanças, remova-a.