Färben Android Status Bar im Nav-Schublade
In dieser app, die ich Baue, ich habe ein Navigation Drawer-fragment in meine Tätigkeit. Ich bin mit 5.0, so habe ich in der Lage, die primaryColor und primaryColorDark, um die richtigen Farben. Ich habe beschlossen, zu versuchen und style meine Nav-Schublade sehr ähnlich wie Google Jetzt die Schublade in 5.0, wo der Nav Schublade hat Ihren eigenen hintergrund für die status bar. (Kann keine Bilder posten, nicht genug Ruf >.>)
Habe ich folgte dieser Frage Empfehlungen hier, die dazu beigetragen hat ein wenig Recht. Ich habe erreicht, zeichnen meine Nav-Schublade unter der Statusleiste, wenn ich ziehen Sie es heraus. Nur Problem ist, ich kann nicht herausfinden, wie man die Farbe der Statusleiste in meiner Schublade. Derzeit, es zeigt nur weiß.
Hier sind die relevanten bits für meine styles und code:
Aktivität Layout:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Main"
android:fitsSystemWindows="true">
<!-- main content -->
...
<!-- Drawer fragment -->
<fragment
android:id="@+id/navigation_drawer"
android:layout_width="@dimen/navigation_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="left|start"
android:theme="@style/DrawerTheme"
android:fitsSystemWindows="true"
android:choiceMode="singleChoice"
android:name="com.myname.appname.NavigationDrawerFragment"
tools:layout="@layout/fragment_navigation_drawer" />
</android.support.v4.widget.DrawerLayout>
Fragment-Layout:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/navDrawerFragment"
android:theme="@style/DrawerTheme"
android:background="@color/WindowBackground"
tools:context=".NavigationDrawerFragment"
android:fitsSystemWindows="true">
<!-- content here -->
</RelativeLayout>
Pro link oben, Einstellung Farbe meiner Statusleiste für die Aktivität (dieser Teil funktioniert nicht richtig):
public void onCreate(Bundled savedInstanceState) {
super.onCreate(savedInstanceState);
//....
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
drawerLayout.setDrawerShadow(R.drawable.drawer_shadow, Gravity.START);
drawerLayout.setStatusBarBackgroundColor(getResources().getColor(R.color.colorPrimaryDark));
//....
}
Und schließlich, meine damit verbundenen Stile der Tätigkeit, und dem, was ich habe 'versucht' zu ordnen, um das fragment.
<style name="StatusBarActivityTheme" parent="MyAppTheme">
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
<style name="DrawerTheme" parent="MyAppTheme">
<item name="android:statusBarColor">#000000</item>
<item name="android:colorPrimaryDark">#000000</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
</style>
Vielen Dank im Voraus für jede Hilfe, die Sie senden können, auf meine Art! Ich vermute, dass mein Problem bezieht sich darauf, wie Google Nun der primäre Bildschirm hat eine transparente status-Leiste, und nur Farben, die es bei der Nav-Schublade, aber keine news zu das Gegenteil wäre toll!
- R. Farbe.colorPrimaryDark auf eine Farbe den Wert Ihrer app-XML, nicht nur die android -: colorPrimaryDark Thema-Attribut. Was haben Sie definiert, @Farbe/colorPrimaryDark wie in deinen res Dateien?
- Ich habe definiert, @Farbe/colorPrimaryDark, um eine hex-Farbe, kann nicht denken, es aus der Spitze von meinem Kopf. Dieser Teil der Arbeit - es ist richtig färben der Aktivität (drawerlayout s), die status-bar. Ich bin mehr besorgt über das fragment Schublade. (Ich wünschte WIRKLICH, ich könnte nach ein paar screencaps, aber dies ist mein Erster Beitrag...)
- DrawerLayout.setStatusBarBackgroundColor() ist die richtige Methode aufrufen, um die Schublade status bar Farbe. Sie nicht benötigen, um ein spezielles Thema auf. Tut getResources().getColor(R. color.colorPrimaryDark) beheben weiß?
- R. Farbe.colorPrimaryDark in colors.xml mit dieser Erklärung: <color name="colorPrimaryDark">#303f9f</color>. Es ist die Einstellung der status-bar-Farbe für die top-container in der Aktivität Layout - (activity_main.xml). Was nicht bunt ist, wird die Statusleiste Teil des fragments. Ich erkannte, dass ich kann verwenden imgur, also hier ist, wie es aussieht: imgur.com/5rbKnZb. Rechts ist der wesentliche Inhalt und die Links der nav-fragment-Schublade.
- Oh, das ist auch der Effekt von Google Jetzt, dass ich versuche zu erreichen. Wieder, verlassen ist der Nav-Schublade, und rechts ist der Inhalt. imgur.com/gC4s0YB
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit dem setup haben Sie die Nav-Schublade ist einfach eine Ansicht zeichnen seinen hintergrund (die Sie definiert haben, als
android:background="@color/WindowBackground"
), die sich unter der Statusleiste (die Farbe die Sie gesetzt haben, um transparent über IhreStatusBarActivityTheme
). Das system sieht nur aus, soweit die Tätigkeit Design, um den status bar Farbe; Zuweisungandroid:statusBarColor
ein Kind hat keine Wirkung.Wäre die einfachste Lösung, um ändern Sie Ihre Nav Schublade fragment-layout ist
android:background
auf die Farbe, die Sie wünschen. Möchten Sie für den Teil unter Ihrem Bild zu bleiben weiß, eine Möglichkeit wäre, dann fügen Sie eine leere Ansicht in der Schublade-layout mitandroid:background="@color/WindowBackground"
oder eine andere Farbe.Wenn Sie Wunsch für die Inhalt in Ihrem Nav-Schublade zu erweitern unterhalb der Statusleiste, es erfordert ein bisschen mehr Arbeit. Der Grund, warum Sie offset, um mit zu beginnen ist, weil Sie für die
android:fitsSystemWindows
- Attribut auf true, was wiederum die Sicht aufruft, die Standard -fitSystemWindows(). Als die docs erklären, diese Methode nimmt die Einpresstiefe (d.h. die Höhe der Statusleiste in unserem Fall) und es gilt als die Ansicht Polsterung (in deinem Fall wird das top-Polsterung für dieRelativeLayout
Ihrer Nav Schublade fragment).Einen Weg um dies zu umgehen padding überschrieben, die der Ansicht
fitSystemWindows()
Methode. Ich leiten Sie an die open-source-IO-Zeitplan-app von Google - spezifisch, Sie verwendet dieScrimInsetsScrollView
als root-element in Ihre Nav Schublade. Diese modifizierteScrollView
gilt ein Gelege von einer Farbe Ihrer Wahl (über die benutzerdefinierteapp:insetForeground
- Attribut) und verbraucht die Einpresstiefe, d.h. es ist keine weitere Polsterung!Den
ScrimInsetsScrollView
kann verwendet werden, als ein Modell zu schreiben, Ihre eigene version für jede Ansicht Nachkomme, wirklich - sehen die nahezu identischScrimInsetsFrameLayout
.