如何修改系统默认导航栏(System Navigation Bar)的图标颜色
安卓系统导航栏图标颜色修改方案
你当前代码中使用的View.SYSTEM_UI_FLAG_HIDE_NAVIGATION作用是隐藏导航栏,和修改图标颜色无关,仅能实现修改导航栏背景色的效果。以下是不同安卓版本下修改导航栏图标颜色的实现方案:
适配方案
1. XML主题静态配置
在对应API等级的样式文件中添加配置即可全局生效:
- values-v26/styles.xml(适配Android 8.0及以上版本)
<!-- 设置导航栏背景色 --> <item name="android:navigationBarColor">@color/white</item> <!-- 开启亮色导航栏模式,导航栏图标自动切换为深色 --> <item name="android:windowLightNavigationBar">true</item>
如果需要图标为浅色,将windowLightNavigationBar设为false即可。
2. 代码动态修改
通用兼容写法(支持Android 5.0以上所有版本)
// 替换为你自己的背景色 val navBgColor = ContextCompat.getColor(this, R.color.primary_text_color) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { window.navigationBarColor = navBgColor // 导航栏背景为浅色时添加该Flag,图标变为深色;不需要时移除该Flag即可 window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { // 安卓5.0-7.1原生系统不支持修改导航栏图标颜色,默认图标为浅色,建议背景色设为深色保证可见性 window.navigationBarColor = navBgColor }
Android 11及以上更优写法
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { window.navigationBarColor = navBgColor // 设为深色图标 window.insetsController?.setSystemBarsAppearance( WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS, WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS ) // 需要恢复浅色图标时调用: // window.insetsController?.setSystemBarsAppearance( // 0, // WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS // ) }
注意事项
- 低于Android 8.0的原生系统没有官方修改导航栏图标颜色的API,仅部分国产厂商提供私有适配接口,如有低版本兼容需求可查阅对应厂商的开发文档。
- 废弃的
resources.getColor()方法建议统一替换为ContextCompat.getColor(),避免版本兼容崩溃。
内容的提问来源于stack exchange,提问作者Hasnat Ahmad
相关产品推荐
相关产品推荐

