Coloriage Android Barre d'État de la valeur liquidative de Tiroir
Dans cette application que je suis en train de construire, j'ai ajouté un Tiroir de Navigation fragment dans mon activité. Je suis en utilisant 5.0, j'ai donc été en mesure de définir la primaryColor et primaryColorDark pour obtenir les bonnes couleurs. J'ai décidé d'essayer et mon style de Nav Tiroir à être très similaire à Google Maintenant tiroirs en 5.0, où la valeur liquidative de Tiroir a son propre arrière-plan de la barre d'état. (Ne peut pas afficher les images, pas assez de réputation >.>)
J'ai suivi cette question recommandations du ici, qui a aidé un peu. J'ai réalisé le dessin de mon Nav Tiroir sous la barre d'état quand je le tire. Seul problème est, je ne peux pas comprendre comment définir la couleur de la barre d'état qui indique dans mon tiroir. Actuellement, il montre juste blanc.
Voici les bits de mes styles et de code:
De L'Activité Mise En Page:
<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 De Mise En Page:
<?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>
Par le lien ci-dessus, la définition de la couleur de ma barre d'état pour l'activité (cette partie fonctionne correctement):
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));
//....
}
Et enfin, mon associé styles pour l'activité, et ce que j'ai "essayé" d'attribuer le 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>
Merci d'avance pour toute aide que vous pouvez envoyer à ma façon! Je soupçonne que mon problème est lié à la façon dont Google Maintenant l'écran principal présente une transparence de la barre de statut, et seules les couleurs pendant la Nav de Tiroir, mais aucune nouvelle pour le contraire serait génial!
J'ai défini @couleur/colorPrimaryDark à un hex de couleur, ne peut pas penser de la sur le haut de ma tête. La partie de travail est - il correctement la coloration de l'activité (drawerlayout) barre d'état. Je suis plus préoccupé par le fragment de tiroir. (Je souhaite VRAIMENT que je pourrais poster quelques captures d'écran, mais c'est mon premier post...)
DrawerLayout.setStatusBarBackgroundColor() est la méthode correcte d'appel pour régler le tiroir de la barre d'état de couleur. Vous n'avez pas besoin de définir un thème spécial. Ne getResources().getColor(R. de couleur.colorPrimaryDark) résoudre à blanc?
R. de couleur.colorPrimaryDark est définie dans colors.xml avec cette déclaration: <couleur nom="colorPrimaryDark">#303f9f</couleur>. C'est le réglage de la barre d'état la couleur du conteneur dans l'Activité de Mise en page (activity_main.xml). Ce n'est pas de couleur est la barre de statut de partie de le fragment. J'ai réalisé que je peux utiliser imgur, donc voici à quoi ça ressemble: imgur.com/5rbKnZb. Droit est le contenu principal, et à gauche est le fragment de nav tiroir.
Ah, aussi, c'est l'effet de Google Maintenant que je suis en train de réaliser. Encore une fois, la gauche est la valeur liquidative de Tiroir, et la droite est le contenu. imgur.com/gC4s0YB
OriginalL'auteur Andrew | 2014-10-25
Vous devez vous connecter pour publier un commentaire.
Avec la configuration que vous avez, la valeur liquidative du Tiroir est simplement une vue de dessin de son arrière-plan (que vous avez défini comme
android:background="@color/WindowBackground"
) en dessous de la barre d'état (dont la couleur que vous avez choisie transparente par l'intermédiaire de votreStatusBarActivityTheme
). Le système ne recherche que la mesure de l'Activité thème à définir l'état de la barre de couleur, l'attribution deandroid:statusBarColor
à un enfant n'a pas d'effet.La solution la plus simple serait de changer votre Nav Tiroir fragment de la disposition de
android:background
à la couleur que vous désirez. Si vous le souhaitez, pour la partie en dessous de votre image restera blanc, une option serait d'ajouter ensuite une Vue vide dans votre tiroir de mise en page avecandroid:background="@color/WindowBackground"
ou une autre couleur.Si vous désirez pour le contenu dans votre Nav Tiroir à s'étendre au-dessous de la barre d'état, il nécessite un peu plus de travail. La raison pour laquelle il est compensée pour commencer, c'est parce que vous définissez la
android:fitsSystemWindows
attribut à true, ce qui à son tour appelle la vue par défaut de fitSystemWindows(). Comme les docs expliquer, cette méthode prend le médaillon (c'est à dire la hauteur de la barre d'état dans notre cas), et l'applique à la vue de rembourrage (dans votre cas, cela devient supérieure rembourrage pour leRelativeLayout
de votre Nav Tiroir fragment).Un moyen de contourner ce rembourrage est d'écraser la vue du
fitSystemWindows()
méthode. Je vous orienter vers l'open source IO Calendrier d'application par Google - plus précisément, ils ont utilisé leScrimInsetsScrollView
comme l'élément racine dans leur Nav Tiroir. Cette modificationScrollView
s'applique une grille d'une couleur de votre choix (set via la coutumeapp:insetForeground
attribut) et consomme l'encart, c'est à dire pas plus de rembourrage!La
ScrimInsetsScrollView
peut être utilisé comme un modèle pour rédiger votre propre version pour n'importe quel Affichage descendant, vraiment à voir le presque identiqueScrimInsetsFrameLayout
.Merci pour l'explication sur la façon dont il fonctionne!
Merci, j'ai mis à jour l'arrière-plan de Navigation du tiroir vue de la racine et cela a fonctionné 🙂
OriginalL'auteur justasm