Was sind WindowInsets?

7

Ich versuche, etwas über das Android-Betriebssystem zu erfahren, und während ich die Google I / O 2014 App gelesen habe, bin ich auf das WindowInsets gestoßen. Wenn jemand erklären kann, was sie sind, dann wäre es eine große Hilfe. Danke.

    
Samvid Mistry 07.11.2015, 16:49
quelle

2 Antworten

2

Sie können alles über WindowInsets hier erfahren. WindowInsets stellt Ihnen den Bereich on zur Verfügung das Fenster, das von der Anwendung verwendet werden kann. Für sich genommen ist es nicht von großem Nutzen. Der wahre Zweck kommt, wenn Sie View.onApplyWindowInsets entweder außer Kraft setzen oder View.OnApplyWindowInsetsListener implementieren. Sie können über sie hier lesen: View.onApplyWindowInsets und View.OnApplyWindowInsetsListener

  

Listener zum benutzerdefinierten Anwenden von Fenstereinschüben auf eine Ansicht.

     

Apps können diese Schnittstelle implementieren, wenn sie angewendet werden sollen   Benutzerdefinierte Richtlinie für die Art und Weise, wie Fenstereinfügungen für eine Ansicht behandelt werden. Ob   Ein OnApplyWindowInsentsListener ist festgelegt, seine onApplyWindowInsets-Methode   wird anstelle der eigenen OnApplyWindowInsets-Methode der View aufgerufen.   Der Listener kann optional den Parameter View's aufrufen   onApplyWindowInsets-Methode zum Anwenden des normalen Verhaltens der Ansicht als Teil   für sich.

Kurz gesagt: Wenn Sie dies überschreiben, können Sie den Bereich des für Ihre Ansicht verfügbaren Fensters steuern.

    
Henry 09.11.2015, 13:06
quelle
30

WindowInsets sind Einsätze (oder Größen) von Systemansichten (z. B. Statusleiste, Navigationsleiste), die auf das Fenster angewendet werden.

Am konkreten Beispiel wäre das leicht zu verstehen. Stellen Sie sich dieses Szenario vor:

Nun möchten Sie nicht, dass WindowInsets auf den Hintergrund ImageView angewendet wird, weil in diesem Fall ImageView durch die Höhe der Statusleiste aufgefüllt würde.

Sie möchten aber, dass Toolbar mit Einsätzen versehen wird, weil sonst Toolbar irgendwo in der Mitte der Statusleiste angezeigt würde.

Die Ansicht erklärt den Wunsch, WindowInsets in xml anzuwenden, indem sie sagt:

%Vor%

In diesem Beispiel können Sie WindowInsets nicht auf das root-Layout anwenden, da das root-Layout WindowInsets und die ImageView würden aufgefüllt werden.

Stattdessen können Sie ViewCompat.setOnApplyWindowInsetsListener verwenden, um auf die Werkzeugleiste Einsätze anzuwenden:

%Vor%

Beachten Sie, dass dieser Callback aufgerufen wird, wenn das Root-Layout von Toolbar WindowsInsets an seine untergeordneten Elemente übergibt. Layouts wie FrameLayout , LinearLayout nicht, DrawerLayout , CoordinatorLayout tun.

Sie können Ihr Layout unterklassifizieren, z. FrameLayout und überschreiben onApplyWindowInsets :

%Vor%

Es gibt einen schönen Blogbeitrag auf Medium von Ian Lake in Bezug auf dieses Zeug, auch "Ein Master-Fenster fitter

azizbekian 13.08.2016 06:26
quelle