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ć:

  1. Twój widok jest już częścią układu, ponieważ jest zdefiniowany w pliku XML
  2. Tworzyłeś widok dynamicznie i musisz go dodać za pomocą metody addView
child jest widokiem, który chcesz dodać, a LayoutParams są parametrami układu (I.E. szerokość, i wysokość)

Stan widoczności widoku jest typu Integer i może mieć jedną z trzech opcji:

  1. VISIBLE (0) – Widok jest widoczny dla użytkownika
  2. INVISIBLE (4) – Widok jest niewidoczny dla użytkownika, ale nadal zajmuje miejsce w layoucie
  3. 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:

Dołączamy OnClick Listener do przycisku

Gdy uruchomimy aplikację i naciśniemy przycisk otrzymamy:

Wewnątrz Logcat widać, że listenery są wywoływane, gdy nasz widok pojawia się w widoku

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:

removeOnGlobalLayoutListener wymaga API > 15

Linia linearLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this) upewnia się, że listener zostanie wywołany tylko raz. Jeśli chcesz kontynuować nasłuchiwanie zmian, usuń ją.