Hoe en waarom Android Visibility Listeners

De Android UI is opgebouwd uit Views, en in een reguliere applicatie, zijn er meestal meerdere van hen. Om erachter te komen welke View de gebruiker op dit moment bekijkt, moet u Visibility Listeners installeren.

Lees hieronder om meer te weten te komen over de verschillende opties die u hebt om de zichtbaarheid status van een View te identificeren.

Om onze listeners te laten werken, moeten we eerst ervoor zorgen dat onze View wordt gevonden in de lay-out hiërarchie. Dit kan op twee manieren gebeuren:

  1. Uw View maakt al deel uit van uw layout, omdat hij in een XML-bestand is gedefinieerd
  2. U hebt dynamisch een View gemaakt, en u moet hem toevoegen met de addView-methode
child is de View die u wilt toevoegen en LayoutParams zijn de layout-parameters (b.v. breedte en hoogte)

De zichtbaarheidsstatus van een View is van het type Integer en kan een van de drie opties hebben:

  1. VISIBLE (0) – De View is zichtbaar voor de gebruiker
  2. INVISIBLE (4) – De View is onzichtbaar voor de gebruiker, maar neemt nog wel ruimte in de lay-out in
  3. GONE (8) – De View is onzichtbaar, en neemt geen ruimte in op de layout

Eenmaal binnen onze layout-hiërarchie, zijn er een paar native opties om ons te helpen weten wanneer de zichtbaarheid van onze View veranderd is.

onVisibilityChanged

Deze methode wordt geactiveerd wanneer de zichtbaarheid van de view of van een voorouder van de view is veranderd. De status van de zichtbaarheid is te vinden in de zichtbaarheidsparameter.

onWindowVisibilityChanged

Deze methode wordt geactiveerd wanneer de zichtbaarheid van het venster waarin onze View zich bevindt, is gewijzigd. Dit garandeert niet dat het venster waarin uw View zich bevindt zichtbaar is voor de gebruiker, aangezien het kan worden verborgen door een ander venster.

Visibility Listeners in actie

Om deze twee listeners in actie te zien, laten we een eenvoudig project maken. We hebben een LinearLayout met een TextView en een knop. We zorgen ervoor dat de klik-actie van de knop onze aangepaste view aan de layout toevoegt.

Onze aangepaste weergave:

En tot slot de code in onze MainActivity:

We koppelen een OnClick Listener aan de knop

Wanneer we de toepassing uitvoeren en op de knop drukken, krijgen we:

U kunt in Logcat zien dat de luisteraars worden aangeroepen wanneer onze view in beeld komt

Het voorbeeldproject kunt u hier krijgen.

ViewTreeObserver

Dit is een native object dat een groot aantal listeners heeft die op de hoogte worden gebracht van verschillende veranderingen in de view tree. Enkele prominente zijn:

  • OnGlobalLayoutListener
  • OnWindowAttachListener
  • OnWindowFocusChangeListener

Om een ViewTreeObserver te koppelen, moet u het volgende doen:

removeOnGlobalLayoutListener vereist API > 15

De regel linearLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this) zorgt ervoor dat de listener maar één keer wordt aangeroepen. Als u wilt blijven luisteren naar wijzigingen, verwijdert u deze regel.