Jak i dlaczego używać Android Visibility Listeners
UI Androida jest zbudowany z Widoków, a w zwykłej aplikacji jest ich zazwyczaj kilka. Aby dowiedzieć się, na który widok patrzy użytkownik, musisz zainstalować nasłuchiwacze widoczności.
Przeczytaj poniżej, aby dowiedzieć się o różnych opcjach, które masz, aby zidentyfikować status widoczności widoku.
Aby nasze nasłuchiwacze działały, musimy najpierw upewnić się, że nasz widok znajduje się w hierarchii układu. Są dwa sposoby, aby to zrobić:
- Twój widok jest już częścią układu, ponieważ jest zdefiniowany w pliku XML
- Tworzyłeś widok dynamicznie i musisz go dodać za pomocą metody addView
Stan widoczności widoku jest typu Integer i może mieć jedną z trzech opcji:
- VISIBLE (0) – Widok jest widoczny dla użytkownika
- INVISIBLE (4) – Widok jest niewidoczny dla użytkownika, ale nadal zajmuje miejsce w layoucie
- GONE (8) – Widok jest niewidoczny, i nie zajmuje miejsca w layoucie
Już wewnątrz naszej hierarchii layoutów, jest kilka natywnych opcji, które pomogą nam wiedzieć, kiedy widoczność naszego widoku się zmieniła.
onVisibilityChanged
Ta metoda jest wywoływana, gdy zmieniła się widoczność widoku lub przodka widoku. Stan widoczności znajduje się wewnątrz parametru visibility.
onWindowVisibilityChanged
Ta metoda jest wywoływana, gdy okno zawierające nasz widok zmieniło swoją widoczność. To nie gwarantuje, że okno w którym znajduje się nasz Widok jest widoczne dla użytkownika, ponieważ może być zasłonięte przez inne okno.
Visibility Listeners In Action
Aby zobaczyć te dwa listenery w akcji, stwórzmy prosty projekt. Będziemy mieli LinearLayout z TextView i przyciskiem. Sprawimy, że akcja kliknięcia przycisku doda nasz niestandardowy widok do layoutu.
Nasz niestandardowy widok:
I na koniec kod w naszym MainActivity:
Gdy uruchomimy aplikację i naciśniemy przycisk otrzymamy:
Przykładowy projekt można uzyskać tutaj.
ViewTreeObserver
Jest to obiekt natywny, który posiada szeroką gamę słuchaczy, którzy są powiadamiani o różnych zmianach widoczności drzewa widoku. Niektóre znaczące, na które należy zwrócić uwagę to:
- OnGlobalLayoutListener
- OnWindowAttachListener
- OnWindowFocusChangeListener
Aby dołączyć ViewTreeObserver, musisz wykonać następujące czynności:
Linia linearLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this)
upewnia się, że listener zostanie wywołany tylko raz. Jeśli chcesz kontynuować nasłuchiwanie zmian, usuń ją.