Android如何设置状态栏为白色且图标为黑色(setSystemUiVisibility已废弃)
Android 状态栏适配方案(minSdk21,targetSdk31)
你之前的代码判断条件>=21存在合理性问题:SYSTEM_UI_FLAG_LIGHT_STATUS_BAR属性仅在API23(Android 6.0)及以上版本生效,API21~22版本原生不支持状态栏图标变为深色,设为白色状态栏会导致白色图标看不清。
代码实现方案(Java)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { // 统一设置状态栏底色为白色 getWindow().setStatusBarColor(Color.WHITE); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { // API30及以上使用官方推荐的WindowInsetsController替代废弃方法 WindowInsetsController insetsController = getWindow().getInsetsController(); if (insetsController != null) { insetsController.setSystemBarsAppearance( WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS, WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS ); } } else { // API23~29版本原有方法仍可正常使用,官方未做移除处理 getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); } }
低版本兼容说明
API21~22版本没有原生支持的深色状态栏图标方案,建议做差异化处理:
- 方案一:低版本下状态栏改为浅灰色,保证白色图标可见
- 方案二:仅在API23及以上版本使用白色状态栏
主题实现方案(无需写代码)
在对应版本的style文件中配置Activity主题即可:
- res/values-v21/styles.xml(适配5.0~5.1)
<item name="android:statusBarColor">#e0e0e0</item>
- res/values-v23/styles.xml(适配6.0及以上)
<item name="android:statusBarColor">@android:color/white</item> <item name="android:windowLightStatusBar">true</item>
内容的提问来源于stack exchange,提问作者Suman Radhakrishnan
相关产品推荐
相关产品推荐

