Jak a proč používat Android Visibility Listeners

Uživatelské rozhraní Androidu je sestaveno z pohledů a v běžné aplikaci je jich obvykle několik. Chcete-li zjistit, na které Zobrazení se uživatel právě dívá, musíte nainstalovat Posluchače viditelnosti.

Přečtěte si níže různé možnosti, které máte k dispozici pro zjištění stavu viditelnosti Zobrazení.

Aby naše poslouchání fungovalo, musíme se nejprve ujistit, že se naše Zobrazení nachází v hierarchii rozvržení. To se může stát dvěma způsoby:

  1. Váš View je již součástí rozvržení, protože je definován v souboru XML
  2. Vy jste vytvořili View dynamicky a musíte jej přidat pomocí metody addView
child je View, které chcete přidat, a LayoutParams jsou parametry rozvržení (tj. šířka a výška)

Stav viditelnosti View je typu Integer a může mít jednu ze tří možností:

  1. VISIBLE (0) – Zobrazení je pro uživatele viditelné
  2. INVISIBLE (4) – Zobrazení je pro uživatele neviditelné, ale stále zabírá místo v rozložení
  3. GONE (8) – Zobrazení je neviditelné, a nezabírá místo v rozvržení

Uvnitř hierarchie rozvržení existuje několik nativních možností, které nám pomohou zjistit, kdy se viditelnost našeho Zobrazení změnila.

onVisibilityChanged

Tato metoda se spustí, když se změní viditelnost pohledu nebo jeho předka. Stav viditelnosti se nachází uvnitř parametru visibility.

onWindowVisibilityChanged

Tato metoda je spuštěna, když se změnila viditelnost obsahujícího okna našeho pohledu. To nezaručuje, že okno, ve kterém se váš View nachází, je pro uživatele viditelné, protože může být zakryto jiným oknem.

Poslouchání viditelnosti v akci

Abychom viděli tyto dva posluchače v akci, vytvoříme si jednoduchý projekt. Budeme mít LinearLayout s TextView a tlačítkem. Zajistíme, aby akce tlačítka při kliknutí přidala do rozvržení naše vlastní zobrazení.

Náš vlastní pohled:

A nakonec kód v našem MainActivity:

Na tlačítko připojíme OnClick Listener

Při spuštění aplikace a stisknutí tlačítka dostaneme:

Vnitřní Logcat vidíte, že posluchači jsou voláni, když se naše zobrazení zobrazí

Ukázkový projekt můžete získat zde.

ViewTreeObserver

Jedná se o nativní objekt, který má širokou škálu posluchačů, kteří jsou upozorňováni na různé změny viditelnosti stromu zobrazení. Některé významné, kterých je třeba si všimnout, jsou:

  • OnGlobalLayoutListener
  • OnWindowAttachListener
  • OnWindowFocusChangeListener

Chcete-li připojit ViewTreeObserver, musíte provést následující kroky:

removeOnGlobalLayoutListener vyžaduje API > 15

Řádek linearLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this) zajišťuje, že posluchač bude zavolán pouze jednou. Pokud chcete v naslouchání při změnách pokračovat, odstraňte jej.