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:

  1. Din vy är redan en del av layouten eftersom den är definierad i en XML-fil
  2. Du har skapat en vy dynamiskt och måste lägga till den med hjälp av addView-metoden
child är vyn som du vill lägga till och LayoutParams är layoutparametrarna(I.E. bredd och höjd)

En vyns synlighetsstatus är av typen heltal och kan ha ett av tre alternativ:

  1. VISIBLE (0) – Vyn är synlig för användaren
  2. INVISIBLE (4) – Vyn är osynlig för användaren, men tar fortfarande plats i layouten
  3. 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:

Vi kopplar en OnClick Listener till knappen

När vi kör programmet och trycker på knappen får vi:

Du kan se i Logcat att lyssnarna anropas när vår vy visas

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:

removeOnGlobalLayoutListener kräver API > 15

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.