如何以编程方式修改android:windowLightNavigationBar的值?
android:windowLightNavigationBar 是Android 6.0(API 23)起引入的属性,用于控制导航栏图标颜色:设为true时导航栏图标为深色(适配浅色导航栏背景),设为false时恢复默认浅色图标(适配深色导航栏背景)。以下是动态修改该属性的具体实现方式:
1. Java 实现
设置为 true(深色导航栏图标)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); }
设置为 false(恢复默认浅色图标)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { int currentFlags = getWindow().getDecorView().getSystemUiVisibility(); getWindow().getDecorView().setSystemUiVisibility(currentFlags & ~View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); }
2. Kotlin 实现
设置为 true(深色导航栏图标)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR }
设置为 false(恢复默认浅色图标)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { window.decorView.systemUiVisibility = window.decorView.systemUiVisibility and View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR.inv() }
注意事项
- 必须添加API版本判断,该属性仅在API 23及以上系统生效,低版本调用会触发异常。
- 如果需要保留其他系统UI标志(比如状态栏浅色模式
SYSTEM_UI_FLAG_LIGHT_STATUS_BAR),设置时需合并所有需要的标志位,避免覆盖原有配置:// 同时启用状态栏和导航栏的浅色图标模式 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { int combinedFlags = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR; getWindow().getDecorView().setSystemUiVisibility(combinedFlags); }
内容的提问来源于stack exchange,提问作者Mark Delphi
相关产品推荐
相关产品推荐

