Färbung der Android-Statusleiste in der Nav-Schublade

8

In dieser App, die ich baue, habe ich ein Navigationsschubladen-Fragment in meine Aktivität eingefügt. Ich benutze 5.0, also konnte ich primaryColor und primaryColorDark setzen, um die richtigen Farben zu erhalten. Ich habe mich entschieden, meine Nav-Schublade so zu gestalten, dass sie der Schublade von Google Now in 5.0 sehr ähnlich ist, wo die Nav-Schublade ihren eigenen Hintergrund für die Statusleiste hat. (Bilder können nicht gepostet werden, nicht genug Reputation & gt;. & Gt;)

Ich habe die Empfehlungen dieser Frage befolgt hier , was ziemlich geholfen hat. Ich habe es geschafft, mein Nav Drawer unter der Statusleiste zu zeichnen, wenn ich es herausziehe. Nur Ärger ist, ich kann nicht herausfinden, wie die Farbe der Statusleiste eingestellt wird, die in meiner Schublade angezeigt wird. Derzeit wird nur Weiß angezeigt.

Hier sind die relevanten Teile meiner Stile und meines Codes:

Aktivitätslayout:

%Vor%

Fragment Layout:

%Vor%

Nach obenstehendem Link, Einstellung der Farbe meiner Statusleiste für die Aktivität (dieser Teil funktioniert korrekt):

%Vor%

Und schließlich, meine assoziierten Stile für die Aktivität und was ich versucht habe, dem Fragment zuzuordnen.

%Vor%

Vielen Dank im Voraus für jede Hilfe, die Sie mir schicken können! Ich vermute, dass mein Problem damit zu tun hat, dass der Hauptbildschirm von Google Now über eine transparente Statusleiste verfügt und diese nur während der Nav-Schublade einfärbt, aber jede gegenteilige Nachricht wäre großartig!

    
Andrew 25.10.2014, 23:49
quelle

1 Antwort

17

Mit dem Setup, das Sie haben, ist das Nav Drawer einfach eine Ansicht, die seinen Hintergrund (den Sie als android:background="@color/WindowBackground" definiert haben) unterhalb der Statusleiste (die Farbe, die Sie über StatusBarActivityTheme auf transparent gesetzt haben) zeichnet. Das System sieht nur so weit wie das Aktivitätsthema aus, um die Farbe der Statusleiste festzulegen. das Zuweisen von android:statusBarColor zu einem Kind hat keine Auswirkungen.

Die einfache Lösung wäre, das android:background des Nav-Drawer-Fragmentlayouts auf die gewünschte Farbe zu setzen . Wenn Sie wünschen, dass der Teil unter Ihrem Bild weiß bleibt, wäre es eine Option, eine leere Ansicht in Ihrem Schubladenlayout mit android:background="@color/WindowBackground" oder einer anderen Farbe hinzuzufügen.

Wenn Sie möchten, dass der Inhalt in Ihrem Nav-Fach unterhalb der Statusleiste liegt, ist etwas mehr Arbeit erforderlich. Der Grund dafür ist, dass Sie das android:fitsSystemWindows -Attribut auf "true" setzen, was wiederum den Standard der Ansicht aufruft: fitSystemWindows () . Wie die Dokumentation erklärt, verwendet diese Methode den Inset (dh die Höhe der Statusleiste in unserem Fall) und wendet sie als Padding der Ansicht an (in Ihrem Fall wird dies zum obersten Füllzeichen für das RelativeLayout Ihres Nav-Drawer-Fragments).

Eine Möglichkeit, diese Auffüllung zu umgehen, besteht darin, die Methode fitSystemWindows() der Ansicht zu überschreiben. Ich leite Sie zu der Open-Source-IO-Schedule-App von Google - speziell mit dem ScrimInsetsScrollView als Root-Element in ihrem Nav-Schublade . Diese modifizierte ScrollView wendet ein Gitter einer Farbe Ihrer Wahl (gesetzt über das benutzerdefinierte Attribut app:insetForeground ) an und verbraucht das Inset, d. H. Keine Füllung mehr!

Das ScrimInsetsScrollView kann als Modell verwendet werden, um Ihre eigene Version für einen beliebigen View-Nachfolger zu erstellen. Sehen Sie sich die fast identische ScrimInsetsFrameLayout .

    
justasm 29.10.2014, 02:13
quelle