Correctly Setting Selected Tab Color in BottomNavigationView

Dec 01, 2025 · Programming · 6 views · 7.8

Keywords: BottomNavigationView | color selector | state_checked

Abstract: This technical article provides a detailed guide on configuring the selected tab color in Android's BottomNavigationView. It explains the common pitfall of using state_selected and offers a solution with state_checked and proper selector ordering, based on a high-rated Stack Overflow answer.

Introduction

In Android development, the BottomNavigationView from the Material Design library is widely used for implementing bottom navigation bars. A common customization requirement is to change the color of the selected tab to provide visual feedback to users.

Identifying the Problem

Many developers encounter issues when attempting to set different colors for selected and non-selected tabs. As seen in the provided question, using attributes like android:state_selected="true" in a color selector often fails to work as expected.

Core Solution: state_checked Attribute

The key insight is that BottomNavigationView uses the state_checked state to indicate selection, not state_selected. This is because the navigation items are treated as checkable items in a menu.

Implementing the Color Selector

To correctly define the color selector, ensure that the item with android:state_checked="true" is placed before the default item. Here is the corrected selector code:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:color="@android:color/holo_blue_dark" />
    <item android:color="@android:color/darker_gray"  />
</selector>

In this example, when a tab is checked (selected), it will display the blue color; otherwise, it shows gray. The order is crucial because the selector evaluates items from top to bottom, and the first matching state is applied.

Additional Considerations

While the primary fix involves the selector, ensure that the BottomNavigationView in your layout references this selector correctly using app:itemIconTint and app:itemTextColor. Other answers, such as creating a color folder, are supplementary but not necessary if the core issue is addressed.

Conclusion

By understanding the use of state_checked and maintaining the proper order in color selectors, developers can effectively customize the appearance of BottomNavigationView tabs. This approach enhances user experience by clearly indicating the active section in the app.

Copyright Notice: All rights in this article are reserved by the operators of DevGex. Reasonable sharing and citation are welcome; any reproduction, excerpting, or re-publication without prior permission is prohibited.