Ich versuche, ein Nachtthema für meine App hinzuzufügen, und ich habe fast drei Stunden damit verbracht, den Text und die Symbole in meiner Navigationsschublade zusammen mit dem dunklen Hintergrund weiß zu machen. Hier ist die Art , wie ich über das tut dies in zu gehen , ich versuche , onCreate()
in 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);
}
Der nightMode
Boolesche Wert ist irrelevant, da er funktioniert. Wenn der Nachtmodus auf Ein (0) eingestellt ist, wird jeder in der Navigationsleiste ausgewählte Menüpunkt weiß. Dies geschieht jedoch nur, wenn jedes Element ausgewählt wird, was offensichtlich unpraktisch ist. Hier ist meine drawer_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>
Ich verwende für jedes Element weiße Symbole auf einem transparenten Hintergrund, die jedoch auf dem schwarzen Hintergrund der Navigationsschublade als schwarz angezeigt werden. Ich habe versucht, nach einer XML-Lösung zu suchen, um die Farbe des Textes zu ändern, und ich kratzte mir am Kopf, weil ich nicht weiß, warum dies übersehen wurde.
Kann mir jemand eine dynamische Lösung anbieten, um das zu erreichen, was ich erreichen möchte? Jede Hilfe wird geschätzt, danke!
BEARBEITEN: Ich verwende keine Drittanbieter-Bibliothek, sondern die in der Support-Bibliothek bereitgestellte Navigationsansicht. Hier ist das XML-Layout:
<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
nachDark
und umgekehrt?