Hur och varför man använder Android Visibility Listeners
Androids användargränssnitt är uppbyggt av vyer, och i ett vanligt program finns det vanligtvis flera av dem. För att ta reda på vilken vy användaren för tillfället tittar på måste du installera Visibility Listeners.
Läs nedan för att ta reda på vilka olika alternativ du har för att identifiera synlighetsstatusen för en vy.
För att våra lyssnare ska fungera måste vi först se till att vår vy hittas i layouthierarkin. Detta kan ske på två sätt:
- Din vy är redan en del av layouten eftersom den är definierad i en XML-fil
- Du har skapat en vy dynamiskt och måste lägga till den med hjälp av addView-metoden
En vyns synlighetsstatus är av typen heltal och kan ha ett av tre alternativ:
- VISIBLE (0) – Vyn är synlig för användaren
- INVISIBLE (4) – Vyn är osynlig för användaren, men tar fortfarande plats i layouten
- GONE (8) – Vyn är osynlig, och den tar inte upp plats i layouten
När vi väl är inne i vår layouthierarki finns det några ursprungliga alternativ som hjälper oss att veta när vår vyns synlighet har ändrats.
onVisibilityChanged
Denna metod utlöses när synligheten för vyn eller för en av vyns förfäder har ändrats. Statusen för synligheten finns i parametern visibility.
onWindowVisibilityChanged
Denna metod utlöses när det fönster som innehåller vår vy har ändrat sin synlighet. Detta garanterar inte att fönstret som din vy ligger i är synligt för användaren, eftersom det kan vara dolt av ett annat fönster.
Visibility Listeners In Action
För att se de här två lyssnarna i aktion, låt oss skapa ett enkelt projekt. Vi kommer att ha en LinearLayout med en TextView och en knapp. Vi gör så att knappens on click-åtgärd lägger till vår anpassade vy i layouten.
Vår anpassad vy:
Och slutligen, koden i vår MainActivity:
När vi kör programmet och trycker på knappen får vi:
Du kan hämta exempelprojektet här.
ViewTreeObserver
Detta är ett inhemskt objekt som har ett stort antal lyssnare som meddelas om olika synlighetsändringar i vyträdet. Några framträdande att uppmärksamma är:
- OnGlobalLayoutListener
- OnWindowAttachListener
- OnWindowFocusChangeListener
För att fästa en ViewTreeObserver måste du göra följande:
Raden linearLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this)
ser till att lyssnaren bara anropas en gång. Om du vill fortsätta att lyssna på ändringar tar du bort den.