2015-07-04 21 views
21

próbuję zmienić kolor mojego poz Nawigacja menu Widok:Android - Nawigacja menu Widok poz kolor tła

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> 

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

Kolor tła się nie zmienia. Co robię źle?

Odpowiedz

20

Nie ustawiasz losowania dla tła elementu widoku Nawigacja w pliku styles.xml. Otwórz swój plik układu XML zawierający nawigacji View widget i dodać następującą linię do atrybutów widgetu:

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

Jeśli masz kłopoty z „APP” wskaźnika, należy dodać następującą linię, a także:

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

Należy pamiętać, że zmienia to tylko kolor tła wybranego elementu listy. Jeśli chcesz zmienić także ikonę i kolor tekstu, użyj atrybutu app:itemTextColor.

+0

Dzięki, To praca. Tak więc można usunąć linię w pliku styles.xml. –

+0

to działa znaleźć, ale dla sprawdzanego stanu nie działa dla selektora –

+2

Nice rozwiązanie. Czy istnieje sposób na utrzymanie tła w wybranym stanie? – HaloMediaz

2

@HaloMediaz i @HemantShori Aby zachować tło zaznaczonego elementu w stanie wybranym,

stosowanie android: state_checked = "true" zamiast Androida: state_pressed = "true" w zasobie państwowym kolor.

Więc aktywowane kolor zasobów państwo powinno wyglądać następująco:

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

Twoja odpowiedź była dla mnie poprawna, ale spójrz na kod podczas kopiowania, nie zmieniłeś stanu state_pressed na state_checked – tarasmorskyi

12

poniższy kod działa dobrze dla mnie
mój widok 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"/> 

odkształcalne/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> 

odkształcalne/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

Dzięki za szczegółowe rozwiązanie. – Khan

+0

Zmienia kolor tła elementu menu nadrzędnego, ale co z dzieckiem? – VVB

4

Musisz użyć androida tło = "color" do tyłu koloru menu nawigacyjnym jak:

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

i dla elementów koloru użyć itemTextColor =” kolor "

0

Aby wyświetlić tło dla wybranego elementu, należy dodać

android:checkable="true" 

na każdej pozycji w menu.elementy XML, a następnie ustaw:

app:itemBackground="@drawable/nav_view_item_background" 

na NavigationView i wreszcie:

odkształcalne/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> 
Powiązane problemy