You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改系统默认导航栏(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 06:36:03