2015-07-04 5 views
21

ich versuche Navigation im Menü Ansicht Farbe meines Artikels zu ändern:Android - Navigation Artikel ansehen Menü Hintergrundfarbe

styles.xml

<item name="android:activatedBackgroundIndicator">@drawable/activated_background</item> 

activated_background.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:drawable="@color/White" /> 
    <item android:state_focused="true" android:drawable="@color/White" /> 
    <item android:state_activated="true" android:drawable="@color/White" /> 
    <item android:drawable="@android:color/transparent" /> 
</selector> 

Schublade. xml:

<?xml version="1.0" encoding="utf-8"?> 
<menu 
xmlns:android="http://schemas.android.com/apk/res/android"> 

<group 
    android:id="@+id/group_1"> 
    <item 
     android:id="@+id/drawer_menu_account" 
     android:checked="false" 
     android:title="@string/menu_account" 
     android:icon="@drawable/ic_account_grey600_24dp" /> 
    <item 
     android:id="@+id/drawer_menu_my_post" 
     android:checked="false" 
     android:title="@string/menu_my_post" 
     android:icon="@drawable/ic_pin_grey600_24dp" /> 
</group> 
[...] 

Hintergrundfarbe nicht ändern .. Was mache ich falsch?

Antwort

20

Sie setzen nicht die ziehbar für den Hintergrund eines Navigationsansicht Artikel in Ihrer styles.xml Datei. Öffnen Sie Ihre XML-Layout-Datei mit Ihren Navigationsansicht Widget, und fügen Sie die folgende Zeile in die Attribute des widget:

app:itemBackground="@drawable/activated_background.xml" 

Wenn Sie Probleme mit dem „app“ Zeiger, fügen Sie die folgende Zeile in auch:

xmlns:app="http://schemas.android.com/apk/res-auto" 

Beachten Sie, dass dies nur die Farbe des Hintergrunds eines ausgewählten Listenelements ändert. Wenn Sie das Symbol und die Textfarbe möchten auch zu ändern, verwenden Sie das Attribut app:itemTextColor statt.

+0

Dank, es ist Arbeit. So kann die Zeile in styles.xml entfernt werden. –

+0

dies funktioniert finden, aber für checked Zustand funktioniert nicht für Selektor –

+2

Schöne Lösung. Gibt es eine Möglichkeit, den Hintergrund in einem ausgewählten Zustand zu halten? – HaloMediaz

2

@HaloMediaz und @HemantShori in einem ausgewählten Zustand den Hintergrund des ausgewählten Elements zu halten,

Verwendung android: state_checked = "true" anstelle von Android: state_pressed = "true" in der Farbzustand Ressource.

für mich
meine nav Ansicht

activated_background.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:drawable="@color/White" /> 
    <item android:state_focused="true" android:drawable="@color/White" /> 
    <item android:state_activated="true" android:drawable="@color/White" /> 
    <item android:drawable="@android:color/transparent" /> 
</selector> 
+1

Ihre Antwort war korrekt für mich, aber schauen Sie auf Code, wenn Sie es kopieren, Sie nicht State_pressed in state_checked geändert – tarasmorskyi

12

Below Code funktioniert gut:

<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" 
    android:background="@color/nav.background" 
    app:menu="@menu/menu_drawer" 
    app:itemBackground="@drawable/nav_item_background" 
    app:itemTextColor="@drawable/nav_item_text"/> 

ziehbar/

Ihre aktivierte Farbzustand Ressource So sollte wie folgt aussehen nav_item_background.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:drawable="@color/nav.item.background" /> 
    <item android:state_checked="true" android:drawable="@color/nav.item.background" /> 
    <item android:state_focused="true" android:drawable="@color/nav.item.background" /> 
    <item android:state_activated="true" android:drawable="@color/nav.item.background" /> 
    <item android:drawable="@color/nav.item.background.default" /> 
</selector> 

ziehbar/nav_item_text.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:color="@android:color/white" android:state_checked="true" /> 
    <item android:color="#bdbdbd" /> 
</selector> 
+0

Vielen Dank für detaillierte Lösung. – Khan

+0

Es ändert Hintergrundfarbe des übergeordneten Menüpunkts, aber was ist mit Kind? – VVB

4

Sie android verwenden müssen: background = "color" für Hintergrundfarbe des Navigationsmenü wie:

<android.support.design.widget.NavigationView 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:id="@+id/shitstuff" 
     app:itemTextColor="@color/black" 
     app:menu="@menu/drawermenu" 
     android:background="@color/colorAccent" 
     android:layout_marginTop="-24dp" 
     /> 

und für Elemente Farbe verwenden itemTextColor =“ Farbe "

0

Um die Hintergrundanzeige auf dem ausgewählten Element anzuzeigen, müssen Sie

hinzufügen

an jedem Punkt des Menüs.xml Artikel, dann setzen:

app:itemBackground="@drawable/nav_view_item_background" 

auf NavigationView und schließlich:

ziehbar/nav_view_item_background.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@color/primary" android:state_checked="true" /> 
    <item android:drawable="@android:color/transparent" /> 
</selector>