Background color change in BottomNavigationView

Ravi picture Ravi · Jan 2, 2017 · Viewed 35.6k times · Source

I have implemented BottomNavigationView which is available from the new support library 25.0.0. Here is my code for that

<android.support.design.widget.BottomNavigationView
    android:id="@+id/bottom_navigation"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    app:itemBackground="@color/colorPrimary"
    app:itemIconTint="@drawable/text"
    app:itemTextColor="@drawable/text"
    app:menu="@menu/bottom_navigation_main" />

And text.xml drawable

<?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_enabled="true" />
    <item android:color="@color/colorPrimaryDark" android:state_enabled="false" />
</selector>

With this code I am able to change text color when menu item is clicked, but when I apply same thing to app:itemBackground it is showing error <item> tag requires a 'drawable' attribute or child tag defining a drawable.

This is what I have tried for app:itemBackground

app:itemBackground="@drawable/text"

So my question is how can I change the background color of the selected menu item?

Answer

Ravi picture Ravi · Jan 2, 2017

found an answer from this medium post

  1. We need to use android:state_checked instead of android:state_enabled
  2. within onNavigationItemSelected you need to use return true instead of return false.

and to set background, we cannot use android:color in <item>, we need to use android:drawable

So here how it looks xml file when you are setting it for app:itemTextColor and app:itemIconTint

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

and to set app:itemBackground selector

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/banner_white" android:state_checked="true"/>
    <item android:drawable="@drawable/banner_green" android:state_checked="false"/>
</selector>

Here banner_white and banner_green are pngs.