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:
- A View már része az elrendezésünknek, mivel egy XML fájlban van definiálva
- Dinamikusan hoztunk létre egy View-t, és az addView metódus segítségével kell hozzáadni
A View láthatósági állapota Integer típusú, és három lehetőség közül választhat:
- VISIBLE (0) – A nézet látható a felhasználó számára
- INVISIBLE (4) – A nézet láthatatlan a felhasználó számára, de továbbra is helyet foglal az elrendezésben
- 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:
Amikor futtatjuk az alkalmazást és megnyomjuk a gombot, a következőt kapjuk:
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:
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.