Wie und warum man Android Visibility Listeners verwendet

Die Android UI ist aus Views aufgebaut, und in einer normalen Anwendung gibt es normalerweise mehrere davon. Um herauszufinden, welche View der Benutzer gerade anschaut, müssen Sie Visibility Listeners installieren.

Lesen Sie weiter unten, um mehr über die verschiedenen Optionen zu erfahren, die Sie haben, um den Sichtbarkeitsstatus einer View zu ermitteln.

Damit unsere Listeners funktionieren, müssen wir zunächst sicherstellen, dass unsere View in der Layout-Hierarchie gefunden wird. Es gibt zwei Möglichkeiten, wie dies geschehen kann:

  1. Ihre View ist bereits Teil Ihres Layouts, da sie in einer XML-Datei definiert ist
  2. Sie haben eine View dynamisch erstellt und müssen sie mit der addView-Methode hinzufügen
child ist die View, die Sie hinzufügen möchten und LayoutParams sind die Layout-Parameter (d.h. width, and height)

Der Sichtbarkeitsstatus einer View ist vom Typ Integer und kann eine von drei Optionen haben:

  1. VISIBLE (0) – Die Ansicht ist für den Benutzer sichtbar
  2. INVISIBLE (4) – Die Ansicht ist für den Benutzer unsichtbar, nimmt aber noch Platz im Layout ein
  3. GONE (8) – Die Ansicht ist unsichtbar, und nimmt keinen Platz im Layout ein

In unserer Layout-Hierarchie gibt es einige systemeigene Optionen, mit denen wir feststellen können, wann sich die Sichtbarkeit unserer Ansicht geändert hat.

onVisibilityChanged

Diese Methode wird ausgelöst, wenn sich die Sichtbarkeit des Views oder eines Vorgängers des Views geändert hat. Der Status der Sichtbarkeit befindet sich im Parameter visibility.

onWindowVisibilityChanged

Diese Methode wird ausgelöst, wenn das enthaltende Window unserer View seine Sichtbarkeit geändert hat. Dies garantiert nicht, dass das Fenster, in dem sich die View befindet, für den Benutzer sichtbar ist, da es von einem anderen Fenster verdeckt sein kann.

Sichtbarkeits-Listener in Aktion

Um diese beiden Listener in Aktion zu sehen, lassen Sie uns ein einfaches Projekt erstellen. Wir werden ein LinearLayout mit einer TextView und einer Schaltfläche haben. Wir werden dafür sorgen, dass die Klick-Aktion der Schaltfläche unsere benutzerdefinierte Ansicht zum Layout hinzufügt.

Unsere benutzerdefinierte Ansicht:

Und schließlich der Code in unserer MainActivity:

Wir fügen der Schaltfläche einen OnClick Listener hinzu

Wenn wir die Anwendung ausführen und die Schaltfläche drücken, erhalten wir:

Sie können in Logcat sehen, dass die Listener aufgerufen werden, wenn unsere Ansicht angezeigt wird

Sie können das Beispielprojekt hier erhalten.

ViewTreeObserver

Dies ist ein natives Objekt, das eine breite Palette von Listenern hat, die über verschiedene Sichtbarkeitsänderungen des View-Trees informiert werden. Einige wichtige sind:

  • OnGlobalLayoutListener
  • OnWindowAttachListener
  • OnWindowFocusChangeListener

Um einen ViewTreeObserver anzuhängen, müssen Sie Folgendes tun:

removeOnGlobalLayoutListener requires API > 15

Die Zeile linearLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this) sorgt dafür, dass der Listener nur einmal aufgerufen wird. Wenn Sie weiterhin auf Änderungen hören wollen, entfernen Sie sie.