Navigation Drawer item background colour for selected item

android navigation drawer selected item color programmatically
android navigation drawer item click
set navigation drawer color programmatically
navigation drawer item color change
navigation view item background color
how to change navigation menu background color in android
how to typeface the item text in navigation drawer in android
navigation drawer item click not working

I used Android Studio to implement the Navigation Drawer and I can't get the blue colour that is used to show which section we're currently in to change.

I've tried numerous things, I'm currently using a listSelector which looks like:

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_activated="true" android:drawable="@color/selected" />
    <item android:state_pressed="true" android:drawable="@color/highlight" />


</selector>

I've also tried state_checked. state_pressed works in this situation but the currently selected item is still blue.

EDIT: I've been examining this more and when the adapter is created the context that is passed is getActionBar().getThemedContext() so I'm thinking if I can find the right attribute to assign to my actionbar style I can change it from there. I've tried a few different attributes with no luck. Does anyone know the exact attribute?

I've also realised if I put

<item name="android:activatedBackgroundIndicator">@drawable/nav_listview_selector</item>

in the main part of my theme and change getActionBar().getThemedContext() for getActivity.getBaseContext then I can change the color but I don't think this is the correct way. I think the themed context should be used. So if anyone knows where the activatedBackgroundIndicator could be put so that it would be used in getActionBar.getThemedContext()

EDIT2:

So the text view used for the listview is one within the SDK it looks like this:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceListItemSmall"
    android:gravity="center_vertical"
    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
    android:background="?android:attr/activatedBackgroundIndicator"
    android:minHeight="?android:attr/listPreferredItemHeightSmall"
/>

So I tried modifying the "?android:attr/activatedBackgroundIndicator" at the theme level but it has no effect for checked/selected/activated but it does for pressed. Does anyone know why this is? And how I can change it?

To solve this problem:

1- You don't need android:listSelector under your ListView.

2- Open (or Create) styles.xml under (res/values).

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="android:activatedBackgroundIndicator">@drawable/drawer_list_selector</item>
</style>

3- Under res/drawable folder create drawer_list_selector.xml file

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/light_gray_color" />
    <item android:state_activated="true" android:drawable="@drawable/red_color" />
    <item android:drawable="@android:color/transparent" />
</selector>

4- Under res/drawable create red_color.xml / light_gray_color.xml (or any other name) and add your desired Hex color:

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#C8FF0000"/>
</shape>

5- Open your project AndroidManifest.xml and add android:theme tag (if not exist)

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >

Reference / Credit: Changing Navigation Drawer Selected Item Color from default blue

Android Material Component: Navigation Drawer Styling (Part II), Android Material Component: An easy approach to Navigation Drawer of states for each item in the Navigation Drawer (for instance, selected, pressed, for menu item background in res > drawable and a color for menu item in res > color. I was working on Nav drawer on my app. I have made the background of my nav drawer #000000(Black). Whenever I select any item the textcolor of text changes from #E44F50(Carrot Red) to black but I cant change the background color of the selected item. All I want is to change the background color of selected Item from black to carrot red.

To change the "Navigation Drawer item background colour for selected item" you could do it with the attribut:

colorControlHighlight

In your "styles.xml" it could look like this:

<style name="YourStyleNameFor.NavigationDrawer" parent="ThemeOverlay.AppCompat.Light">
    <item name="colorControlHighlight">@color/your_highlight_color</item>
</style>

Don't forget to apply your Style in the tag:

android.support.design.widget.NavigationView

For example in your activity_main.xml it could look like this:

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

    <!-- the following line referes to your style  -->
    app:theme="@style/YourThemeNameFor.NavigationDrawer"

    <!-- the following two lines are maybe also interesting for you -->
    app:itemIconTint="@color/gray3"
    app:itemTextColor="@color/gray3"

    app:menu="@menu/navigationdrawer_main" />

how to change the color of selected item in drawer, What do you mean by changing the color of selected item. Is it the color of the text or the background ? Create a new Android application using application name: “Navigation Drawer” and package name: “com.javahelps.navigationdrawer“. Select the “Navigation Drawer Activity” as the default activity. Step 3: (Optional) … To change the default theme color of the application, change the values in values/colors.xml file.

This is working for me:

  1. First define a drawable item_bg.xml as:

    <?xml version="1.0" encoding="utf-8"?>
        <selector xmlns:android="http://schemas.android.com/apk/res/android">
            <item android:state_checked="true" android:drawable="@drawable/nav_menu_bg" />
        </selector>
    
  2. Then use this drawable in navigation_main_layout.xml as:

    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:itemBackground="@drawable/item_bg"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_navigation"
        app:menu="@menu/navigation_main_layout_drawer" />
    

Navigation Drawer item background colour for selected item, I used Android Studio to implement the Navigation Drawer and I can't get the blue colour that is used to show which section we're currently in to change. I’m using white icons on a transparent background for each item, yet they show up as black on the black background of the navigation drawer. I’ve tried looking for an xml solution to changing the color of the text and I’m scratching my head because I don’t know why this was overlooked.

here is how i have done and it is working, the brief concept is maintain the position of selected item in adapter and call notifyDataSetChanged on calling notifyDatasetChanged the getView method is called again and in get view check the position on the selected position change the background view. Here is the code :

Adapter of NavigationDrawer List View

public class MenuAdapter extends BaseAdapter {

private static final int TYPE_HEADER = 0;
private static final int TYPE_ITEM = 1;
private Context mContext;
private String name;
private int profile;
private int mIcons[];
private int selectedPosition = 0;
private String mNavTitles[];
private LayoutInflater mInflater;

public MenuAdapter(String titles[], int icon[], String Name, int profile) {
    mNavTitles = titles;
    mIcons = icon;
    name = Name;
    this.profile = profile;
}

public MenuAdapter(String Titles[], int Icons[], Context mContext) {
    mNavTitles = Titles;
    mIcons = Icons;
    this.mContext = mContext;
    mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public int getCount() {
    return mNavTitles.length;
}

@Override
public Object getItem(int position) {
    return position;
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    convertView = mInflater.inflate(R.layout.item_row, parent, false);

    TextView textView = (TextView) convertView.findViewById(R.id.rowText);
    ImageView imageView = (ImageView) convertView.findViewById(R.id.rowIcon);
    final LinearLayout layout = (LinearLayout) convertView.findViewById(R.id.outerLayout);

    imageView.setImageResource(mIcons[position]);
    textView.setText(mNavTitles[position]);

    if (position == selectedPosition)
        layout.setBackgroundColor(mContext.getResources().getColor(R.color.app_bg));
    else  
      layout.setBackgroundColor(mContext.getResources().getColor(R.color.normal_bg));

    return convertView;
}

public void setSelectedPosition(int position) {

    this.selectedPosition = position;

}


}

in your activity do this

 private class DrawerItemClickListener implements ListView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView parent, View view, int position, long id) { 
        mMenuAdapter.setSelectedPosition(position - 1);
        mMenuAdapter.notifyDataSetChanged();
    }
}

if anyone still face any difficulty, feel free to ask.

Change the color of a checked menu item in a navigation drawer , Whenever I select any item the textcolor of text changes from #E44F50(Carrot Red) to black but I cant change the background color of the selected item. All I want� My code works perfectly: every time an item in Navigation Drawer is clicked the item is selected. Of course I want to start the app with a default fragment (home), but Navigation Drawer doesn't ha

I have implement drawer menu with custom adapter class. May be it will help someone Drawer List

<ListView
    android:id="@+id/listview_drawer"
    android:layout_width="260dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:background="@color/menu_item_color"
    android:choiceMode="singleChoice"
    android:divider="@android:color/transparent"
    android:dividerHeight="0dp"
    android:fadingEdge="none"
    />

drawer_list_item.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content" 
android:background="@drawable/menu_selector"
>

<ImageView
    android:id="@+id/imgIcon"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:layout_marginLeft="12dp"
    android:layout_marginRight="12dp"
    android:src="@drawable/ic_menu_home" />

<TextView
    android:id="@+id/lblName"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_centerVertical="true"
    android:gravity="center_vertical"
    android:layout_toRightOf="@+id/imgIcon"
    android:minHeight="48dp"
    android:textColor="@color/menu_txt_color" />

menu_selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android" android:exitFadeDuration="@android:integer/config_mediumAnimTime">
<!-- selected -->
<item android:drawable="@color/menu_item_active_color" android:state_focused="true" android:state_pressed="false"/>
<item android:drawable="@color/menu_item_active_color" android:state_pressed="true"/>
<item android:drawable="@color/menu_item_active_color" android:state_activated="true"/>
<item android:drawable="@color/menu_item_active_color" android:state_checked="true"/>
<item android:drawable="@color/menu_item_active_color" android:state_selected="true"/>

<item android:drawable="@color/menu_item_color" android:state_activated="false"/>

Add this on item click listner of listview yourlistview.setItemChecked(position, true);

The Solution That the Menu Item of Navigation View Can't Change , That was I couldn't appoint a background color for the navigation item when it was selected. Like this: It was annoying, I found many answers� Today, when I created a left navigation bar in android app, I met a strange issue. That was I couldn’t appoint a background color for the navigation item when it was selected. Like this: It was annoying, I found many answers on the internet, but they all couldn’t fix my issue.

Fixing activatedBackgroundIndicator in AppCompat Navigation , to AppCompat since it used the navigation drawer and seemed like the perfect candidate. android:background="?android:attr/activatedBackgroundIndicator". While this is correct, it leaves my items with different colors on different versions of Android. <item name="android:windowNoTitle">true</item>. 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 :

Changing text color of menu item in navigation drawer , Changing text color of menu item in navigation drawer and icons in my navigation drawer turn white along with the dark background. When night mode is set to on (0), whatever menu item is selected in the navigation drawer turns white. When night mode is set to on (0), whatever menu item is selected in the navigation drawer turns white. However, that only happens when each item is selected which is obviously inconvenient. Here is my drawer_dark.xml:

issue to remove NavigationView menu item selected color?, Navigation Drawer item background colour for selected item, To solve this problem: 1- You don't need android:listSelector under your ListView. 2- Open (or � how to change the color of selected item in drawer. the color background of the selected element is used when the Navigation Item is checked selected item

Comments
  • I ended up using also state_selected (in addition to your checked and pressed) + ListView.setItemChecked. Took me ages so I may have a state too many defined
  • I think I've already tried that at some point. And the setItemChecked is used as it's part of Android Studios auto implementation.
  • Correct, when I used the default implementation of the navigation drawer via Android Studio, the currently active fragment's title on the navigation drawer is highlighted blue and I would like to change that blue to be a color I use for my app and also make the font bold but only for the selected item. Maybe its the xml file I am using for my background. Currently its applying the color change and the bold text to each item in the navigation drawer.
  • Solved my problem! Thank you :)
  • This is it. This is the answer you're looking for. All other answers on this site for this problem are roundabout ways of doing it. This is the easiest to implement and the one that gets the best results.
  • This is not working for me. The list item corresponding to the current activity is not painted in its respective colour(which I guess is red in your code).
  • Yes, It worked for me. Only after setting itemBackground="@drawable/drawer_list_selector" in NavigationDrawer instead of calling it on AppTheme. Also using item.setCheckable(true); and item.setChecked(true); inside onNavigationItemSelected(MenuItem item);
  • I had to use this on: android:selectableItemBackground instead of android:activatedBackgroundIndicator for this to work on my recyclerview and drawer items. Everything else in the answer remained unchanged. I hope this helps.
  • thanks, this worked for me
  • app:itemBackground="@drawable/item_bg" This works for me... thanks
  • @ayz4sci: Please do not fiddle around with the code of this answer. If you want to propose an improvement to the solution then either leave a comment for the answerer (so that they can improve it) or provide your own answer (only if reasonable, i.e., it provides fundamental improvement).
  • honk you are right, @ayz4sci and else part is required as if we are reusing the view in adapter and we don't right else part then multiple option will get highlighted. Thanks a lot for your effort though.
  • At the time I wrote the first comment, @ayz4sci had proposed yet another edit, where they changed the line with the normal_bg once again to use a transparent color. I therefore found the suggestions too experimental. I think it's better if you apply the changes after they have been discussed with you.