web-dev-qa-db-fra.com

Android - Navigation View couleur de fond du menu de l'élément

j'essaie de changer la couleur de mon article Menu Navigation View:

styles.xml

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

activé_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>

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

La couleur de fond ne change pas .. Qu'est-ce que je fais mal?  

24
Emmanuel Loisance

Vous ne définissez pas le dessin pour l'arrière-plan d'un élément Vue de navigation dans votre fichier styles.xml. Ouvrez votre fichier de présentation XML contenant votre widget Vue de navigation et ajoutez la ligne suivante aux attributs du widget:

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

Si vous rencontrez des problèmes avec le pointeur "app", ajoutez également la ligne suivante:

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

Notez que cela ne change que la couleur de l'arrière-plan d'un élément de la liste sélectionné. Si vous souhaitez que l'icône et la couleur du texte changent également, utilisez plutôt l'attribut app:itemTextColor

29
ZakDaniels99

Le code ci-dessous fonctionne bien pour moi
ma vue de navigation:

<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>
15
V. Kalyuzhnyu

Vous devez utiliser Android: background = "color" pour afficher la couleur de fond du menu de navigation.

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

et pour les éléments color, utilisez itemTextColor = "color"

4
Ks Sjkjs

@HaloMediaz et @HemantShori Pour conserver l'arrière-plan de l'élément sélectionné dans un état sélectionné,

utilisez Android:state_checked="true" au lieu de Android:state_pressed="true" dans la ressource d'état de couleur.

Ainsi, votre ressource d'état de couleur activée devrait ressembler à ceci:

activé_background.xml

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_checked="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>
3
Adewale Balogun

Pour que l'arrière-plan s'affiche sur l'élément sélectionné, vous devez ajouter

 Android:checkable="true"

sur chaque élément de vos éléments menu.xml, puis définissez:

app:itemBackground="@drawable/nav_view_item_background"

sur votre NavigationView et enfin: 

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>
0
JimmyFlash