J'essaie d'ajouter un thème de nuit pour mon application et j'ai perdu près de trois heures à essayer de faire en sorte que le texte et les icônes de mon tiroir de navigation deviennent blancs avec l'arrière-plan sombre. Voici la façon dont j'essaie de faire cela onCreate()
dans MainActivity.java
:
navigationView = (NavigationView) findViewById(R.id.navigation_view);
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
// This method will trigger onItemClick of navigation menu
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
// Checking if the item is in checked state or not, if not make it in checked state
if (menuItem.isChecked())
menuItem.setChecked(false);
else menuItem.setChecked(true);
if (nightMode == 0) {
SpannableString spanString = new SpannableString(menuItem.getTitle().toString());
spanString.setSpan(new ForegroundColorSpan(Color.WHITE), 0, spanString.length(), 0); // fix the color to white
menuItem.setTitle(spanString);
}
Le nightMode
booléen n'est pas pertinent car il fonctionne. Lorsque le mode nuit est activé (0), l'élément de menu sélectionné dans le panneau de navigation devient blanc. Cependant, cela ne se produit que lorsque chaque élément est sélectionné, ce qui est évidemment gênant. Voici mon tiroir_dark.xml:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group
android:checkableBehavior="single">
<item
android:id="@+id/unitone"
android:checked="true"
android:icon="@drawable/one_white"
android:title="Classical Period" />
<item
android:id="@+id/unittwo"
android:checked="false"
android:icon="@drawable/two_white"
android:title="Postclassical Period" />
<item
android:id="@+id/unitthree"
android:checked="false"
android:icon="@drawable/three_white"
android:title="Early Modern Era" />
<item
android:id="@+id/unitfour"
android:checked="false"
android:icon="@drawable/four_white"
android:title="Dawn of Industrial Age" />
<item
android:id="@+id/unitfive"
android:checked="false"
android:icon="@drawable/five_white"
android:title="Modern Era" />
</group>
</menu>
J'utilise des icônes blanches sur un fond transparent pour chaque élément, mais elles apparaissent en noir sur le fond noir du tiroir de navigation. J'ai essayé de chercher une solution xml pour changer la couleur du texte et je me gratte la tête parce que je ne sais pas pourquoi cela a été négligé.
Quelqu'un peut-il m'offrir une solution dynamique pour obtenir ce que j'essaie de réaliser? Toute aide est appréciée, merci!
EDIT: Je n'utilise pas de bibliothèque tierce, c'est le NavigationView fourni dans la bibliothèque de support. Voici la mise en page XML:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:elevation="7dp"
tools:context=".MainActivity"
android:fitsSystemWindows="true" >
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/ColorDark" />
<include layout="@layout/toolbar" />
</FrameLayout>
<android.support.design.widget.NavigationView
android:id="@+id/navigation_view"
android:background="#000"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/header"
app:menu="@menu/drawer" />
</android.support.v4.widget.DrawerLayout>
Light
àDark
et vice versa ..