0

J'ai un NavigationView & Menu de rendu à l'intérieur. Mon menu a 3 groupes & chacun contient quelques éléments de sous-menu. Mon problème est, quand je sélectionne un élément de sous-menu & va fragment spécifique. Cependant, lorsque je rouvre NavigationView/tiroir pour sélectionner un autre élément, le dernier élément sélectionné n'apparaît pas en surbrillance.Ne pas mettre en surbrillance l'élément enfant sélectionné de navigationview

Actuellement, il change simplement la couleur de l'élément de sous-menu sélectionné, mais je veux qu'il soit mis en évidence comme ci-dessous instantané.

enter image description here

Activité de base XML

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

    <include 
     layout="@layout/app_bar_app_base" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <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" 
     app:headerLayout="@layout/nav_header_app_base" 
     app:menu="@menu/activity_app_base_drawer" 
     android:background="@color/white" 
     app:itemBackground="@color/white" /> 

</android.support.v4.widget.DrawerLayout> 

des éléments du menu XML (activity_app_base_drawer)

<item 
    android:id="@+id/nav_android_title" 
    android:title="Android" > 
    <menu> 
     <group android:checkableBehavior="single"> 
     <item 
      android:id="@+id/nav_android_best_practices" 
      android:icon="@drawable/best_practices_icon" 
      android:checked="false" 
      android:title="Best Practices" /> 
     <item 
      android:id="@+id/nav_android_monthly_report" 
      android:icon="@drawable/report_icon" 
      android:checked="false" 
      android:title="Monthly Report" /> 
     </group> 
    </menu> 
</item> 
<item 
    android:id="@+id/nav_iOS_title" 
    android:title="iOS"> 
    <menu> 
     <group android:checkableBehavior="single"> 
     <item 
      android:id="@+id/nav_ios_best_practices" 
      android:icon="@drawable/best_practices_icon" 
      android:checked="false" 
      android:title="Best Practices" /> 
     <item 
      android:id="@+id/nav_ios_monthly_report" 
      android:icon="@drawable/report_icon" 
      android:checked="false" 
      android:title="Monthly Report" /> 
     </group> 
    </menu> 
</item> 
<item 
    android:id="@+id/nav_communicate_title" 
    android:title="Other"> 
    <menu> 
     <group android:checkableBehavior="single"> 
     <item 
      android:id="@+id/nav_terms" 
      android:icon="@drawable/terms_icon" 
      android:checked="false" 
      android:title="Terms &amp; Conditions" /> 
     <item 
      android:id="@+id/nav_about_us" 
      android:icon="@drawable/about_icon" 
      android:checked="false" 
      android:title="About Us" /> 
     </group> 
    </menu> 
</item> 

+0

Regroupez votre menu parent en tant qu'enfant –

+0

Si vous souhaitez vérifier un élément, il suffit de le définir avant de définir l'état coché. 'item.setCheckable (true); item.setChecked (true); ' – Ironman

+0

@RajeshKushvaha N'a pas fonctionné – VVB

Répondre

3

Voici le code parfait !

Ajouter trois atrributes dans NavigationView

app: itemIconTint
app: itemTextColor
app: itemBackground

<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" 
    app:headerLayout="@layout/nav_header_app_base" 
    app:menu="@menu/activity_app_base_drawer" 
    android:background="@color/white" 
    app:itemIconTint="@drawable/navigation_view_icon_tint_selector" 
    app:itemTextColor="@drawable/navigation_view_text_selector" 
    app:itemBackground="@drawable/ripple_navigation_selector" 
/> 

navigation_view_icon_tint_selector

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<!-- This is used when the Navigation Item is checked --> 
<item android:color="#005481" android:state_checked="true" /> 
<item android:color="#005481" android:state_pressed="true"></item> 
<item android:color="#005481" android:state_activated="true"></item> 
<!-- This is the default text color --> 
<item android:color="#525252" /> 

navigation_view_text_selector

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<!-- This is used when the Navigation Item is checked --> 
<item android:color="#005481" android:state_checked="true" /> 
<item android:color="#005481" android:state_pressed="true"></item> 
<item android:color="#005481" android:state_activated="true"></item> 
<!-- This is the default text color --> 
<item android:color="#525252" /> 

ripple_navigation_selector

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
<item android:drawable="#ffdbdbdb" android:state_pressed="true"/> 
<item android:drawable="#ffdbdbdb" android:state_activated="true"/> 
<item android:drawable="#ffdbdbdb" android:state_checked="true"/> 
<item android:drawable="#FFFFFF"/> 

+0

fonctionne parfaitement. Merci beaucoup. Continuez sur la bonne voie. Seul le changement est nécessaire pour passer @ color/color_name au lieu de hardcoded car il donne une erreur par rapport à l'attribut drawable – VVB

+0

Oui J'ai modifié avec le code de couleur. –

1

Vous pouvez définir le comportement checkable des éléments de menu en utilisant l'attribut android: checkable dans l'élément, ou pour un groupe entier avec le android: checkableBehavior attribut dans la element.so mettre un checkableBehavior pour menu principal

<menu> 
<group android:checkableBehavior="single"> 
    <item 
     android:id="@+id/nav_android_title" 
     android:title="Android" > 
     <menu> 
      <group android:checkableBehavior="single"> 
       <item 
        android:id="@+id/nav_android_best_practices" 
        android:icon="@drawable/best_practices_icon" 
        android:checked="false" 
        android:title="Best Practices" /> 
       <item 
        android:id="@+id/nav_android_monthly_report" 
        android:icon="@drawable/report_icon" 
        android:checked="false" 
        android:title="Monthly Report" /> 
      </group> 
     </menu> 
    </item> 
    <item 
     android:id="@+id/nav_iOS_title" 
     android:title="iOS"> 
     <menu> 
      <group android:checkableBehavior="single"> 
       <item 
        android:id="@+id/nav_ios_best_practices" 
        android:icon="@drawable/best_practices_icon" 
        android:checked="false" 
        android:title="Best Practices" /> 
       <item 
        android:id="@+id/nav_ios_monthly_report" 
        android:icon="@drawable/report_icon" 
        android:checked="false" 
        android:title="Monthly Report" /> 
      </group> 
     </menu> 
    </item> 
    <item 
     android:id="@+id/nav_communicate_title" 
     android:title="Other"> 
     <menu> 
      <group android:checkableBehavior="single"> 
       <item 
        android:id="@+id/nav_terms" 
        android:icon="@drawable/terms_icon" 
        android:checked="false" 
        android:title="Terms &amp; Conditions" /> 
       <item 
        android:id="@+id/nav_about_us" 
        android:icon="@drawable/about_icon" 
        android:checked="false" 
        android:title="About Us" /> 
      </group> 
     </menu> 
    </item> 
</group> 
</menu> 
+0

Merci, mais rien ne s'est passé. C'est pareil que le précédent – VVB