web-dev-qa-db-fra.com

Comment puis-je changer la couleur du séparateur dans NavigationView?

J'essaie d'utiliser NavigationView pour implémenter NavigationDrawer. J'ai ajouté le séparateur en définissant le groupe id dans le menu. Cependant, je ne vois pas le séparateur. Je suppose que c'est parce que la couleur du séparateur est identique à celle de l'arrière-plan. Je veux donc changer la couleur du séparateur. Mais je ne trouve aucun moyen de le changer. Quelqu'un peut-il m'aider?

En capture d'écran, il semble y avoir un espace pour séparateur entre History et Settings, mais vous ne le voyez pas.

enter image description here

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<Android.support.v4.widget.DrawerLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    Android:id="@+id/drawer_layout"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical"
    Android:fitsSystemWindows="true"
    tools:context=".ui.MapActivity">

    <LinearLayout
        Android:id="@+id/main_content"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:orientation="vertical">

        <include layout="@layout/toolbar_actionbar" />

        <!--main content-->
    </LinearLayout>

    <Android.support.design.widget.NavigationView
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:layout_gravity="start"
        Android:background="@color/navdrawer_background"
        app:insetForeground="#4000"
        app:itemTextColor="@color/navdrawer_item_text_color"
        app:itemIconTint="@color/navdrawer_item_icon_tint"
        app:headerLayout="@layout/drawer_header"
        app:menu="@menu/drawer"/>
</Android.support.v4.widget.DrawerLayout>

tiroir.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <group Android:id="@+id/group_feature"
        Android:checkableBehavior="single">
        <item Android:id="@+id/navdrawer_item_map"
            Android:checked="true"
            Android:icon="@drawable/ic_drawer_map"
            Android:title="@string/navdrawer_item_map"/>
        <item Android:id="@+id/navdrawer_item_favourite"
            Android:icon="@drawable/ic_drawer_fav"
            Android:title="@string/navdrawer_item_fav"/>
        <item Android:id="@+id/navdrawer_item_history"
            Android:icon="@drawable/ic_drawer_history"
            Android:title="@string/navdrawer_item_history"/>
    </group>
    <group Android:id="@+id/group_settings"
        Android:checkableBehavior="single">
        <item Android:id="@+id/navdrawer_item_settings"
            Android:icon="@drawable/ic_drawer_settings"
            Android:title="@string/navdrawer_item_settings"/>
        <item Android:id="@+id/navdrawer_item_help"
            Android:icon="@drawable/ic_drawer_help"
            Android:title="@string/navdrawer_item_help"/>
        <item Android:id="@+id/navdrawer_item_about"
            Android:icon="@drawable/ic_drawer_about"
            Android:title="@string/navdrawer_item_about"/>
    </group>
</menu>
36
PageNotFound

il suffit d'appliquer la ligne suivante sur style.xml

<item name="Android:listDivider">your_color</item>

Ce qui suit est juste une information pour votre connaissance ... Si vous avez vu la bibliothèque de support de conception .. ils utilisent la disposition suivante pour le séparateur NavigationView ..

<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
             Android:layout_width="match_parent"
             Android:layout_height="wrap_content">

    <View Android:layout_width="match_parent"
          Android:layout_height="1dp"
          Android:background="?android:attr/listDivider"/>

</FrameLayout>

ici, vous pouvez voir Android: background = "? android: attr/listDivider" .. Alors profitez-en ... et voici ma sortie qui change de couleur en holo_blue enter image description here

88
Moinkhan

Voici le meilleur moyen d'utiliser le menu comme vue

<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:theme="@style/ThemeToolbar.NavigationView"
    app:itemTextColor="@color/white"
    app:itemIconTint="@color/white"
    app:headerLayout="@layout/activity_home_nav_header"
    app:menu="@menu/activity_home_drawer" />

ThemeToolbar.NavigatinoView

 <style name="ThemeToolbar.NavigationView" >
    <item name="Android:listDivider">@color/white</item>
    <item name="Android:textColorSecondary">@color/white</item>
</style>

 enter image description here

31
turbandroid

Créez un style dans votre styles.xml. Entrez votre couleur préférée dans Android: listDivider 

<style name="NavigationView"  parent="Base.Theme.AppCompat">
    <item name="Android:listDivider">@color/text_lightgray</item>
</style>

Référencez le style en tant que thème de votre 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="false"
    Android:theme="@style/NavigationView"
    app:headerLayout="@layout/nav_header"
    app:menu="@menu/drawer_view"
    app:itemTextColor="@color/text_white"/>

Enfin, assurez-vous que les groupes de votre menu ont des identifiants uniques. Si vos groupes ne possèdent pas l'attribut id, cela ne fonctionnera pas!

<group Android:checkableBehavior="single"
    Android:id="@+id/group1">
    <item
        Android:id="@+id/item1"
        Android:title="@string/item1" />
</group>
<group Android:checkableBehavior="single"
    Android:id="@+id/group2">

    <item
        Android:id="@+id/item2"
        Android:title="@string/item2" />

</group>
4
mabc21

il faut ajouter un en-tête vierge comme séparateur.

comme

<group Android:id="@+id/my_id">
    <!-- Divider will appear above this item -->
    <item ... />
</group>

réponse originale

1
RBK
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="Android:textColorPrimary">@color/menu_text_color</item>
    <item name="Android:textColorSecondary">@color/menu_text_color</item>
</style>

textColorPrimary change la couleur de l'en-tête.

1
Alp Altunel

Réponse parfaite:

 enter image description here

<Android.support.design.widget.NavigationView
    Android:id="@+id/activity_principal_nav_view"
    Android:layout_width="@dimen/size_230"
    Android:layout_height="match_parent"
    Android:layout_gravity="start"
    Android:background="@color/black"
    Android:fitsSystemWindows="true"
    app:insetForeground="@color/white"
    app:menu="@menu/settings_menu"
    app:itemTextColor="@color/white"
    app:itemIconTint="@color/white"
    app:headerLayout="@layout/settings_menu_header"
    Android:theme="@style/NavigationDrawerStyle"/>
0
George Freire