如何修改App中BottomBar选项选中时的Selector颜色?
嘿,这个问题我太熟了!要修改BottomBar(应该是指Android原生的BottomNavigationView吧?)点击选项时的选中颜色,其实有两种常用的灵活方式,我给你一步步讲清楚:
方法一:创建Color Selector文件(自定义度最高)
这种方式可以精准控制选中/未选中状态的颜色,步骤很简单:
- 首先在
res/drawable目录下新建一个XML文件,比如命名为bottom_nav_color_selector.xml,内容如下:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 选中状态的颜色,替换成你想要的色值 --> <item android:color="@color/custom_selected_color" android:state_checked="true" /> <!-- 未选中状态的颜色 --> <item android:color="@color/custom_unselected_color" android:state_checked="false" /> <!-- 默认 fallback 颜色 --> <item android:color="@color/custom_unselected_color" /> </selector>
- 接着在
res/values/colors.xml里定义你需要的颜色值:
<color name="custom_selected_color">#FF6200EE</color> <!-- 示例紫色 --> <color name="custom_unselected_color">#8A8A8A</color> <!-- 示例灰色 -->
- 最后在布局文件的BottomNavigationView标签里,引用这个selector:
<com.google.android.material.bottomnavigation.BottomNavigationView android:id="@+id/bottom_nav" android:layout_width="match_parent" android:layout_height="wrap_content" app:itemIconTint="@drawable/bottom_nav_color_selector" app:itemTextColor="@drawable/bottom_nav_color_selector" app:menu="@menu/your_bottom_nav_menu" />
方法二:通过全局主题统一设置
如果想让所有BottomNavigationView都用这套颜色,直接修改主题更高效:
- 打开
res/values/styles.xml,找到你的App主题(比如AppTheme),添加或修改以下属性:
<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar"> ... <!-- 直接替换默认的colorPrimary为你想要的选中色 --> <item name="colorPrimary">@color/custom_selected_color</item> <!-- 设置未选中状态的颜色 --> <item name="colorOnSurface">@color/custom_unselected_color</item> <!-- 或者专门定义BottomNavigation的样式 --> <item name="bottomNavigationStyle">@style/CustomBottomNavStyle</item> </style> <style name="CustomBottomNavStyle" parent="Widget.MaterialComponents.BottomNavigationView"> <item name="itemIconTint">@drawable/bottom_nav_color_selector</item> <item name="itemTextColor">@drawable/bottom_nav_color_selector</item> </style>
小提醒
- 确保你的底部导航menu里,每个item都设置了
android:checkable="true",不然选中状态不会生效哦! - 如果你用的是第三方BottomBar库,核心逻辑还是设置颜色状态选择器,但具体属性名可能略有不同,不过看你提到默认用
colorPrimary,应该是原生的Material组件啦~
内容的提问来源于stack exchange,提问作者programdan
相关产品推荐
相关产品推荐

