Miten ja miksi käyttää Androidin näkyvyyden kuuntelijoita
Androidin käyttöliittymä rakentuu näkymistä, ja tavallisessa sovelluksessa niitä on yleensä useita. Saadaksesi selville, mitä Näkymää käyttäjä tällä hetkellä katsoo, sinun on asennettava Näkyvyyskuuntelijat.
Lue alta lisää eri vaihtoehdoista, joilla voit tunnistaa Näkymän näkyvyyden tilan.
Jotta kuuntelijamme toimisivat, meidän on ensin varmistettava, että Näkymämme löytyy asetteluhierarkiasta. Tämä tapahtuu kahdella tavalla:
- Näkymäsi on jo osa asettelua, koska se on määritelty XML-tiedostossa
- Laitoit näkymän dynaamisesti ja sinun on lisättävä se addView-metodilla
Näkymän näkyvyyden tila on Integer-tyyppinen ja sillä voi olla yksi kolmesta vaihtoehdosta:
- VISIBLE (0) – Näkymä näkyy käyttäjälle
- INVISIBLE (4) – Näkymä on näkymätön käyttäjälle, mutta vie silti tilaa asettelussa
- GONE (8) – Näkymä on näkymätön, eikä se vie tilaa asettelussa
Jos olemme asetteluhierarkiassamme, on olemassa muutama natiivivaihtoehto, jotka auttavat meitä tietämään, milloin näkymän näkyvyys on muuttunut.
onVisibilityChanged
Tämä metodi käynnistyy, kun näkymän tai näkymän esi-isän näkyvyys on muuttunut. Näkyvyyden tila löytyy näkyvyysparametrin sisältä.
onWindowVisibilityChanged
Tämä metodi käynnistyy, kun näkymämme sisältävän ikkunan näkyvyys on muuttunut. Tämä ei takaa, että ikkuna, jossa Näkymämme on, on käyttäjän nähtävissä, sillä se voi olla toisen ikkunan peittämä.
Näkyvyyskuuntelijat toiminnassa
Luoaksemme nämä kaksi kuuntelijaa toiminnassa, luodaan yksinkertainen projekti. Meillä on LinearLayout, jossa on TextView ja painike. Laitamme painikkeen klikkaustoiminnon lisäämään mukautetun näkymämme ulkoasuun.
Oma mukautettu näkymämme:
Ja lopuksi koodi MainActivityssämme:
Kun ajamme sovelluksen ja painamme painiketta, saamme:
Osaat esimerkkiprojektin tästä.
ViewTreeObserver
Tämä on natiivi objekti, jolla on laaja valikoima kuuntelijoita, joille ilmoitetaan erilaisista näkymäpuun näkyvyyden muutoksista. Merkittäviä huomioitavia ovat:
- OnGlobalLayoutListener
- OnWindowAttachListener
- OnWindowFocusChangeListener
ViewTreeObserverin kiinnittämiseksi sinun on tehtävä seuraavaa:
Rivi linearLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this)
varmistaa, että kuuntelijaa kutsutaan vain kerran. Jos haluat jatkaa muutosten kuuntelua, poista se.