Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to change the text and icon color of selected menu item on Navigation Drawer programmatically using java

I am a beginner in Android Development. Using android's default Navigation drawer activity I am developing an application. One of the requirements of this app is to change the background colors of layouts (including navigation drawer header color) randomly at run time.

Now everything is going fine except the color of the selected menu item on navigation drawer is still blue. like this :

enter image description here

Now what I want is as the background color of other layouts is pink the selected menu item on the navigation bar should also be pink (I mean the text color and the icon should be pink) like this :

enter image description here

Can anyone please tell how to achieve it programatically in code as I have to change selected text and icon colors at runtime randomly.

Here's the menu xml file for reference:

<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android">       <group android:checkableBehavior="single">         <item                 android:id="@+id/nav_quiz_all"                 android:icon="@drawable/ic_public_black_24dp"                 android:checked="true"                 android:title="All Countries Quiz"/>         <item                 android:id="@+id/nav_quiz_bookmarked"                 android:icon="@drawable/ic_favorite_black_24dp"                 android:title="Favorite Quiz"/>     </group>       <item android:title="Communicate">         <menu>             <item                 android:id="@+id/nav_rate"                 android:icon="@drawable/ic_star_black_24dp"                 android:title="Rate this app"/>             <item                 android:id="@+id/nav_share"                 android:icon="@drawable/ic_share_black_24dp"                 android:title="Share"/>             <item                 android:id="@+id/nav_feedback"                 android:icon="@drawable/ic_feedback_black_24dp"                 android:title="Feedback"/>             <item                 android:id="@+id/nav_about"                 android:icon="@drawable/ic_info_black_24dp"                 android:title="About"/>         </menu>     </item>       <item         android:id="@+id/nav_settings"         android:icon="@drawable/ic_settings_black_24dp"         android:title="Settings"/>  </menu> 
like image 957
Kuldeep Kumar Avatar asked Mar 09 '17 16:03

Kuldeep Kumar


1 Answers

First check for the NavigationView below

<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/white"         app:itemIconTint="@drawable/drawer_item_color"         app:itemTextColor="@drawable/drawer_item_color"         app:headerLayout="@layout/nav_header_main"         app:menu="@menu/activity_main_drawer" /> 

Check here two things

app:itemIconTint="@drawable/drawer_item_color" app:itemTextColor="@drawable/drawer_item_color" 

These both tags are using drawer_item_color.xml which is a selector in drawable folder and below is the code for it

<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android">     <item android:color="@color/pink" android:state_checked="true" />     <item android:color="@color/black" /> </selector> 

use selector and add colors you want. This will do the job for you.

like image 165
Abid Khan Avatar answered Oct 10 '22 21:10

Abid Khan