2015-07-04 4 views
21

cerco di cambiare il colore della mia voce di menu di navigazione Vista:Android - Navigazione sul menu Visualizza elemento colore di sfondo

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> 

cassetto. 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> 
[...] 

Il colore di sfondo non cambia .. Cosa sto facendo di sbagliato?

risposta

20

Non si imposta il drawable per lo sfondo di una voce di visualizzazione di navigazione nel file styles.xml. Aprite il vostro file di layout XML contenente il widget di navigazione Visualizza e aggiungere la seguente riga agli attributi del widget:

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

Se hai problemi con il puntatore "app", aggiungere la seguente riga in pure:

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

Si noti che questo cambia solo il colore dello sfondo di una voce di elenco selezionato. Se desideri modificare anche l'icona e il colore del testo, utilizza l'attributo app:itemTextColor.

+0

Grazie, E 'un lavoro. Quindi la riga in styles.xml può essere rimossa. –

+0

questo funziona trovare ma per lo stato controllato non funziona per il selettore –

+2

Soluzione piacevole. C'è un modo per mantenere lo sfondo in uno stato selezionato? – HaloMediaz

2

@HaloMediaz e @HemantShori Per mantenere lo sfondo della voce selezionata in uno stato selezionato,

utilizzare Android: state_checked = "true" al posto di Android: state_pressed = "true" nella risorsa stato di colore.

Così la vostra risorsa stato attivato il colore dovrebbe assomigliare a questo:

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

la tua risposta è stata corretta per me, ma guarda sul codice quando lo copi, non hai cambiato stato_pressato a state_checked – tarasmorskyi

12

Di seguito il codice funziona bene per me
mio punto di vista nav:

<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"/> 

drawable/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> 

drawable/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

Grazie per la soluzione dettagliata. – Khan

+0

Cambia colore di sfondo della voce del menu principale ma che dire di child? – VVB

4

È necessario utilizzare Android: background = "color" per il colore posteriore del menu di navigazione come:

<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" 
     /> 

e per gli elementi di colore usare itemTextColor =" colore"

0

per avere il display background sul vostro elemento selezionato è necessario aggiungere

android:checkable="true" 

su ogni elemento del menu.elementi XML, quindi impostare:

app:itemBackground="@drawable/nav_view_item_background" 

sul NavigationView e, infine:

drawable/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>