Come e perché usare i Visibility Listeners di Android

L’interfaccia utente di Android è costruita da viste, e in un’applicazione normale, di solito ce ne sono diverse. Per scoprire quale View l’utente sta attualmente guardando, è necessario installare i Visibility Listeners.

Leggi sotto per scoprire le diverse opzioni che hai per identificare lo stato di visibilità di una View.

Per far funzionare i nostri ascoltatori, dobbiamo prima assicurarci che la nostra View sia trovata nella gerarchia del layout. Ci sono due modi in cui questo accade:

  1. La tua View fa già parte del tuo layout, essendo definita in un file XML
  2. Hai creato una View dinamicamente, e devi aggiungerla usando il metodo addView
child è la View che vuoi aggiungere e LayoutParams sono i parametri del layout (cioè larghezza e altezza)

Lo stato di visibilità di una View è di tipo Integer e può avere una delle tre opzioni:

  1. VISIBILE (0) – La vista è visibile all’utente
  2. INVISIBILE (4) – La vista è invisibile all’utente, ma occupa ancora spazio nel layout
  3. GONE (8) – La vista è invisibile, e non occupa spazio nel layout

Una volta all’interno della nostra gerarchia di layout, ci sono alcune opzioni native che ci aiutano a sapere quando la visibilità della nostra View è cambiata.

onVisibilityChanged

Questo metodo viene attivato quando la visibilità della vista o di un suo antenato è cambiata. Lo stato della visibilità si trova all’interno del parametro visibility.

onWindowVisibilityChanged

Questo metodo viene attivato quando la finestra contenente la nostra View ha cambiato la sua visibilità. Questo non garantisce che la finestra in cui si trova la View sia visibile all’utente, poiché potrebbe essere oscurata da un’altra finestra.

Visibility Listeners In Action

Per vedere questi due ascoltatori in azione, creiamo un semplice progetto. Avremo un LinearLayout con una TextView e un pulsante. Faremo in modo che l’azione on click del pulsante aggiunga la nostra vista personalizzata al layout.

La nostra vista personalizzata:

E infine il codice nella nostra MainActivity:

Attacchiamo un ascoltatore OnClick al pulsante

Quando eseguiamo l’applicazione e premiamo il pulsante otteniamo:

Puoi vedere dentro Logcat che gli ascoltatori sono chiamati quando la nostra vista entra in vista

Puoi ottenere il progetto di esempio qui.

ViewTreeObserver

Questo è un oggetto nativo che ha una vasta gamma di ascoltatori che vengono notificati dei vari cambiamenti di visibilità dell’albero della vista. Alcuni importanti da notare sono:

  • OnGlobalLayoutListener
  • OnWindowAttachListener
  • OnWindowFocusChangeListener

Per collegare un ViewTreeObserver, è necessario fare quanto segue:

removeOnGlobalLayoutListener richiede API > 15

La linea linearLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this) si assicura che l’ascoltatore venga chiamato solo una volta. Se vuoi continuare ad ascoltare i cambiamenti, rimuovila.