Android Studio中底部导航栏颜色修改及图标变色修复问题
问题描述

在themes.xml中添加以下代码后:
<item name="android:windowBackground">@color/white</item>
状态栏红圈中的图标变为白色,请问如何将其改回灰色?
以下是当前themes.xml的代码:
<resources xmlns:tools="http://schemas.android.com/tools"> <!-- Base application theme. --> <style name="Theme.CardHolderapp" parent="Theme.MaterialComponents.DayNight.DarkActionBar"> <!-- Primary brand color. --> <item name="colorPrimary">@color/blue_200</item> <item name="colorPrimaryVariant">@color/blue_200</item> <item name="colorOnPrimary">@color/white</item> <!-- Secondary brand color. --> <item name="colorSecondary">@color/blue_200</item> <item name="colorSecondaryVariant">@color/blue_200</item> <item name="colorOnSecondary">@color/white</item> <!-- Status bar color. --> <item name="android:statusBarColor"> @android:color/transparent</item> <!-- Customize your theme here. --> <item name="android:windowLightStatusBar"> true </item> <item name="android:windowBackground">@color/white </item> <item name="android:nav">@color/white </item> </style> </resources>
另外,如何在Android Studio中修改底部导航栏选中项的颜色?
解决方案
一、恢复状态栏图标为灰色
你当前设置了android:windowLightStatusBar=true(该属性用于浅色状态栏下显示深色图标),但因为android:statusBarColor设为透明,状态栏继承了白色的windowBackground,系统适配逻辑出现异常导致图标变白,可通过以下两种方式修复:
- 设置状态栏为非透明浅色
将android:statusBarColor改为和windowBackground一致的白色,确保系统正确识别浅色状态栏:
<item name="android:statusBarColor">@color/white</item>
保留android:windowLightStatusBar=true,图标即可恢复为灰色。
- 使用Material Components主题属性
基于你使用的Material主题,推荐用框架专属属性替代系统属性,兼容性更好:
<item name="statusBarColor">@color/white</item> <item name="android:windowLightStatusBar">true</item>
二、修改底部导航栏选中项颜色
方法1:通过主题全局配置
在themes.xml的主题中添加如下属性,直接定义选中/未选中状态的颜色:
<!-- 自定义选中项颜色(可选,不设置则默认使用colorPrimary) --> <item name="bottomNavigationBarSelectedItemColor">@color/your_selected_color</item> <!-- 未选中项颜色 --> <item name="bottomNavigationBarUnselectedItemColor">@color/your_unselected_color</item>
方法2:布局文件中单独配置
找到布局里的BottomNavigationView标签,添加颜色选择器属性:
<com.google.android.material.bottomnavigation.BottomNavigationView ... app:itemIconTint="@drawable/bottom_nav_color_selector" app:itemTextColor="@drawable/bottom_nav_color_selector" />
然后在res/drawable目录下创建bottom_nav_color_selector.xml文件:
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:color="@color/your_selected_color" android:state_checked="true" /> <item android:color="@color/your_unselected_color" android:state_checked="false" /> </selector>
内容的提问来源于stack exchange,提问作者oscar
相关产品推荐
相关产品推荐

