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?Antworten:
quelle
Verwenden Sie die App: itemIconTint in Ihrer Navigationsansicht, ej:
quelle
NavigationView
hat eine Methode namenssetItemTextColor()
. Es verwendet aColorStateList
.Hier habe ich diese Antwort bekommen. Und dann gleich nach dem Zuweisen meiner Navigationsansicht:
quelle
Mehr Optionen:
Sie können den Gruppentitel auch ändern, indem Sie "textColorSecondary" überschreiben.
In Ihrer styles.xml
In Ihrem Layout
quelle
App hinzufügen : itemTextColor = "# fff" in Ihrer Navigationsansicht wie
quelle
Ich habe den folgenden Code verwendet, um die Textfarbe der Navigationsleiste in meiner App zu ändern.
quelle
Das funktioniert bei mir. Anstelle von customTheme können Sie Ihr Thema in Stile einfügen. In diesem Code können Sie auch die Schriftart und die Textgröße ändern.
Hier ist meine Navigationsansicht
quelle
Sie können dies einfach tun, indem Sie Ihr Thema zu Ihrer Navigationsansicht hinzufügen.
und in Ihrer style.xml-Datei fügen Sie dieses Thema hinzu
quelle
Sie können Drawables in verwenden
App: itemTextColor App: itemIconTint
Dann können Sie den überprüften Zustand und den normalen Zustand mit einem Zeichen steuern
drawer_item_color.xml
quelle
Versuchen Sie dies in der Java-Klasse
quelle
Wenn in Zukunft jemand hierher kommt, der Navigation Drawer Activity verwendet (bereitgestellt von Studio im Fenster "Eingabeaufforderung")
Die Antwort ist -
Verwenden Sie dies vor OnCreate () in MainActivity
und verwenden Sie dies in onNavigationItemSelected () in MainActivity (Sie müssen diese Funktion nicht schreiben, wenn Sie die Navigation Drawer-Aktivität verwenden, sie wird in MainActivity hinzugefügt).
Tipp - Fügen Sie diesen Code vor If else hinzu. Bedingung in onNavigationItemSelected ()
quelle
Dies kann helfen. Es hat bei mir funktioniert
quelle
Sie können auch ein benutzerdefiniertes Thema definieren, das von Ihrem Basisthema abgeleitet ist:
und dann in Ihrer Datei styles.xml:
Sie können dem benutzerdefinierten Thema auch weitere Attribute zuweisen.
quelle
Verwenden Sie einen SpannableString wie folgt, um die individuelle Textfarbe eines einzelnen Elements zu ändern:
quelle
In meinem Fall musste ich die Farbe nur eines Menüpunkts ändern - "Abmelden". Ich musste eine Rekursion durchführen und die Titelfarbe ändern:
Ich habe dies in der onCreate-Methode der Aktivität getan.
quelle
So legen Sie den Artikelhintergrund mit der App fest: itemBackground
drawer_item_bg.xml
quelle
itemIconTint, wenn Sie die Symbolfarbe ändern möchten
quelle
um die Textfarbe der Navigationsleiste zu ändern
wir gebrauchen
app:itemTextColor="@color/white"
um die Farbe der Navigationsschublade zu ändern
verwenden
app:itemIconTint="@color/black"
quelle