Hogyan és miért használjuk az Android láthatósági figyelőket

Az Android felhasználói felület nézetekből épül fel, és egy átlagos alkalmazásban általában több is van belőlük. Ahhoz, hogy megtudjuk, hogy a felhasználó éppen melyik View-t nézi, a Visibility Listeners-t kell telepítenünk.

Az alábbiakban megismerhetjük a különböző lehetőségeket, amelyekkel azonosíthatjuk egy View láthatósági állapotát.

Hogy a figyelőink működjenek, először is meg kell győződnünk arról, hogy a View-nk megtalálható az elrendezési hierarchiában. Ez kétféleképpen történhet:

  1. A View már része az elrendezésünknek, mivel egy XML fájlban van definiálva
  2. Dinamikusan hoztunk létre egy View-t, és az addView metódus segítségével kell hozzáadni
child a View, amit hozzá szeretnénk adni, a LayoutParams pedig az elrendezés paraméterei(I.E. width, and height)

A View láthatósági állapota Integer típusú, és három lehetőség közül választhat:

  1. VISIBLE (0) – A nézet látható a felhasználó számára
  2. INVISIBLE (4) – A nézet láthatatlan a felhasználó számára, de továbbra is helyet foglal az elrendezésben
  3. GONE (8) – A nézet láthatatlan, és nem foglal helyet az elrendezésben

Az elrendezési hierarchiánkon belül van néhány natív lehetőség, amelyek segítségével megtudhatjuk, ha a Nézetünk láthatósága megváltozott.

onVisibilityChanged

Ez a metódus akkor lép működésbe, ha a nézet vagy a nézet valamelyik ősének láthatósága megváltozott. A láthatóság állapota a visibility paraméteren belül található.

onWindowVisibilityChanged

Ez a metódus akkor lép működésbe, amikor a View-nk tartalmazó ablakának láthatósága megváltozott. Ez nem garantálja, hogy az az ablak, amelyben a View-unk van, látható a felhasználó számára, mivel azt egy másik ablak eltakarhatja.

Visibility Listeners In Action

Hogy ezt a két figyelőt működés közben láthassuk, hozzunk létre egy egyszerű projektet. Lesz egy LinearLayoutunk egy TextView-val és egy gombbal. A gomb kattintáskor végrehajtott műveletével hozzáadjuk az egyéni nézetünket az elrendezéshez.

Az egyéni nézetünk:

És végül a kód a MainActivitynkben:

A gombhoz csatolunk egy OnClick Listenert

Amikor futtatjuk az alkalmazást és megnyomjuk a gombot, a következőt kapjuk:

Láthatjuk a Logcat-en belül, hogy a listenerek meghívásra kerülnek, amikor a nézetünk megjelenik

A mintaprojektet itt kaphatjuk meg.

ViewTreeObserver

Ez egy natív objektum, amely számos hallgatóval rendelkezik, amelyek értesítést kapnak a nézetfa különböző láthatósági változásairól. Néhány kiemelkedő közülük:

  • OnGlobalLayoutListener
  • OnWindowAttachListener
  • OnWindowFocusChangeListener

A ViewTreeObserver csatolásához a következőket kell tennünk:

removeOnGlobalLayoutListener requires API > 15

A linearLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this) sor biztosítja, hogy a figyelőt csak egyszer hívja meg. Ha továbbra is figyelni akarod a változásokat, távolítsd el.