13

Ich mag würde eine Navigationsleiste bauen, in dem jedes Element eine andere Auswahl Farbe hat (das Symbol Farbton und Textfarbe), wie der Google Play Store hat:ändern Navigationsansicht Artikel Farbe dynamisch Android

enter image description here

Ich bin mir nicht sicher, wie sie das gelöst haben, ich denke, sie verwenden verschiedene Aktivitäten mit verschiedenen Schubladen. Ich möchte Fragmente verwenden und ich möchte die Symbolfarbe und Textfarbe ändern. Irgendwelche Ideen, wie ich das machen kann? Ich verwende googles Design-Support-Bibliothek und ein Schubladenlayout mit einer Navigationsansicht darin.

+1

Es ist möglich, sie nicht die NavigationView verwendet haben, da diese in der App Weg war vor die Design-Support-Bibliothek (wenn ich mich richtig erinnere). Ich denke, Sie haben die Ansicht selbst erstellt, um diesen Effekt zu erzielen. – Longi

+0

@tom. Hast du eine Lösung gefunden? Du scheinst die Antwort akzeptiert zu haben, aber es funktioniert nicht für mich. –

Antwort

33

Verwendung app:itemIconTint in Ihrem NavigationView für Icons und app:itemTextColor für textcolors

Beispiel verwenden:

drawable/navigation_text_color:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- This is used when the Navigation Item is checked --> 
    <item android:color="#009688" android:state_checked="true" /> 
    <!-- This is the default text color --> 
    <item android:color="#E91E63" /> 
</selector> 

und layout:

<android.support.design.widget.NavigationView 
     . 
     . 
     app:itemTextColor="@drawable/navigation_text_color"/> 
+0

danke, ich ändere jetzt die ColorStateList jedes Mal, wenn auf einen Menüpunkt geklickt wurde. –

+0

Wo würden Sie dieses Selektor-XML-Snippet platzieren? Außerdem ändert 'app: itemTextColor' die Farbe aller Symbole. Gibt es eine Möglichkeit, nur die Farbe eines Symbols zu ändern? Vielen Dank! – justinrixx

+1

@justinrixx Ich ändere es jedes Mal, wenn ein Element mit dem folgenden Java-Code ausgewählt wird: https://jsfiddle.net/a2j7jayo/ –

0

Finllay ich erhielt die Antwort,

Sie müssen die colorAccent in den Farben ändern Datei, die überhaupt Farbe Sie wollen:

<color name="colorAccent">whichever color required</color> 

Diese Lösung für mich gearbeitet

5

Wenn durch dynamisch Sie bedeuten Programmgesteuert könnte man dies versuchen:

// FOR NAVIGATION VIEW ITEM TEXT COLOR 
int[][] states = new int[][]{ 
     new int[]{-android.R.attr.state_checked}, // unchecked 
     new int[]{android.R.attr.state_checked}, // checked 
     new int[]{}        // default 
}; 

// Fill in color corresponding to state defined in state 
int[] colors = new int[]{ 
     Color.parseColor("#747474"), 
     Color.parseColor("#007f42"), 
     Color.parseColor("#747474"), 
}; 

ColorStateList navigationViewColorStateList = new ColorStateList(states, colors); 

// apply to text color 
navigationView.setItemTextColor(navigationViewColorStateList); 

// apply to icon color 
navigationView.setItemIconTintList(navigationViewColorStateList); 

So könnten Sie mehrere Farben für verschiedene Einstellungen definieren l Ike Tag oder Nacht.

0
<android.support.design.widget.NavigationView 
      . 
      . 
      app:itemIconTint="@color/your_selector_file_name" // for Icon 
     app:itemTextColor="@color/your_selector_file_name" // for text 
/> 

Hinzufügen zu was @DAVOOD sagte. Der untere Farbwähler funktionierte für mich.

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
     <!-- This is used when the Navigation Item is checked --> 
     <item android:color="@color/tenoBrandColor" android:state_pressed="true" /> 
     <!-- This is the default text color --> 
     <item android:color="@color/textprimary" /> 
</selector> 
0

Es gibt eine einfachere Option für die Faulen da draußen.

TL; DR: einfach einen neuen style mit dem colorPrimary erstellen Sie Ihre gewünschte Farbe zu sein und stellen Sie dann die NavigationView ‚s theme diese neue style zu sein.

So stellen Sie ein neues style wie:

<style name="AppTheme.NoActionBar.NavigationView"> 
    <item name="colorPrimary">@color/myDesiredColor</item> 
</style> 

Diese style wird von Ihrer Basis theme (auf meinem Fall war es AppTheme.NoActionBar) automatisch erben und legen Sie müssen nur die colorPrimary mit der gewünschten Farbe.

Dann müssen Sie nur noch die NavigationView auf ‚s theme als:

android:theme="@style/AppTheme.NoActionBar.NavigationView" 

in:

<android.support.design.widget.NavigationView 
    android:id="@+id/nav_view" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    android:fitsSystemWindows="true" 
    app:headerLayout="@layout/nav_header_menu_test" 
    app:menu="@menu/main_drawer" 
    android:theme="@style/AppTheme.NoActionBar.NavigationView" />