
本文介绍在 android 应用中,如何基于应用主题主色(如蓝色)自动同步更新底部导航栏颜色,支持 xml 声明式配置与代码动态设置两种方式,兼容 api 21+。
本文介绍在 android 应用中,如何基于应用主题主色(如蓝色)自动同步更新底部导航栏颜色,支持 xml 声明式配置与代码动态设置两种方式,兼容 api 21+。
在 Android 开发中,实现导航栏(Navigation Bar,即屏幕底部的系统栏)颜色与应用主色调(如 primaryColor)保持一致,是提升 UI 一致性与用户体验的关键细节。该功能自 Android 5.0(API 21)起原生支持,无需第三方库即可实现。
✅ 方式一:通过 styles.xml 静态声明(推荐用于主题统一场景)
在 res/values/styles.xml 中,将 android:navigationBarColor 属性绑定至主题色资源:
<!-- res/values/styles.xml -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/primaryColor</item>
<item name="colorPrimaryDark">@color/primaryColorDark</item>
<!-- 关键:导航栏颜色自动继承主色调 -->
<item name="android:navigationBarColor">@color/primaryColor</item>
</style>确保 @color/primaryColor 已在 colors.xml 中正确定义(例如 <color name="primaryColor">#2196F3</color>)。此方式在应用启动时即生效,简洁可靠,适用于主题固定、无需运行时切换的场景。
✅ 方式二:通过 Java/Kotlin 代码动态设置(适用于运行时换肤或深色模式适配)
在 Activity 的 onCreate() 方法中(需在 setContentView() 之后调用),使用 Window API 动态设置:
// Kotlin 示例
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
window.navigationBarColor = ContextCompat.getColor(this, R.color.primaryColor)
}// Java 示例
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
getWindow().setNavigationBarColor(ContextCompat.getColor(this, R.color.primaryColor));
}⚠️ 注意事项:
- 必须在
setContentView()之后调用,否则可能无效; - 导航栏颜色仅在
FLAG_TRANSLUCENT_NAVIGATION未启用时生效(即默认不透明模式); - 若启用
Edge-to-edge显示(WindowCompat.setDecorFitsSystemWindows(window, false)),需额外处理系统栏绘制逻辑,避免颜色被覆盖; - 深色模式下,建议搭配
isLightTheme判断,选择适配的深色/浅色导航栏值(如R.color.primaryColorDark)。
? 总结
两种方式本质互补:styles.xml 适合全局统一配置,代码设置则赋予更强的灵活性。无论采用哪一种,请始终校验 Build.VERSION.SDK_INT >= 21,并确保目标颜色资源已正确定义。合理运用这些方法,可让导航栏真正成为应用视觉语言的自然延伸,而非孤立的系统组件。

















