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:
- Ihre View ist bereits Teil Ihres Layouts, da sie in einer XML-Datei definiert ist
- Sie haben eine View dynamisch erstellt und müssen sie mit der addView-Methode hinzufügen
Der Sichtbarkeitsstatus einer View ist vom Typ Integer und kann eine von drei Optionen haben:
- VISIBLE (0) – Die Ansicht ist für den Benutzer sichtbar
- INVISIBLE (4) – Die Ansicht ist für den Benutzer unsichtbar, nimmt aber noch Platz im Layout ein
- 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:
Wenn wir die Anwendung ausführen und die Schaltfläche drücken, erhalten wir:
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:
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.