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:

  1. Näkymäsi on jo osa asettelua, koska se on määritelty XML-tiedostossa
  2. Laitoit näkymän dynaamisesti ja sinun on lisättävä se addView-metodilla
child on lisättävä näkymä ja LayoutParams ovat asetteluparametreja(I.E. width ja height)

Näkymän näkyvyyden tila on Integer-tyyppinen ja sillä voi olla yksi kolmesta vaihtoehdosta:

  1. VISIBLE (0) – Näkymä näkyy käyttäjälle
  2. INVISIBLE (4) – Näkymä on näkymätön käyttäjälle, mutta vie silti tilaa asettelussa
  3. 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:

Liitämme painikkeeseen OnClick-kuuntelijan

Kun ajamme sovelluksen ja painamme painiketta, saamme:

Logcatin sisältä näkee, että kuuntelijoita kutsutaan, kun näkymämme tulee näkyviin

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:

removeOnGlobalLayoutListener requires API > 15

Rivi linearLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this) varmistaa, että kuuntelijaa kutsutaan vain kerran. Jos haluat jatkaa muutosten kuuntelua, poista se.