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:
- La tua View fa già parte del tuo layout, essendo definita in un file XML
- Hai creato una View dinamicamente, e devi aggiungerla usando il metodo addView
Lo stato di visibilità di una View è di tipo Integer e può avere una delle tre opzioni:
- VISIBILE (0) – La vista è visibile all’utente
- INVISIBILE (4) – La vista è invisibile all’utente, ma occupa ancora spazio nel layout
- 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:
Quando eseguiamo l’applicazione e premiamo il pulsante otteniamo:
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:
La linea linearLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this)
si assicura che l’ascoltatore venga chiamato solo una volta. Se vuoi continuare ad ascoltare i cambiamenti, rimuovila.