如何获取状态栏背景颜色以显示colorPrimaryDark

我有一个布局,用于根据colorPrimaryDark更新状态栏的背景颜色。

当布局的根布局是CoordinatorLayout ,这很有效,但当我将其切换到LinearLayout ,状态栏背景不再更新。

布局源和屏幕截图粘贴在下面。 还列出了正常工作的布局示例。

谢谢!

layout.xml

          

styles.xml

     @color/colorPrimary @color/colorPrimaryDark @color/colorAccent   false true    

款式 – v21.xml

   false true true @android:color/transparent  

状态栏不是colorPrimaryDark

状态栏不是colorPrimaryDark

状态栏是colorPrimaryDark

状态栏是colorPrimaryDark

发布styles-v21.xml时发现android:statusBarColor设置为透明:

 @android:color/transparent 

将android:statusBarColor更改为colorPrimaryDark修复它。 谢谢!

 @color/colorPrimaryDark 

从CoordinatorLayout切换到LinearLayout后,不确定为什么statusBarColor开始起作用。 谢谢!

在设置内容视图之前在Activity中尝试此操作

 if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { getWindow().setStatusBarColor(getFactorColor(getResources().getColor(R.color.action_bar_color), 0.4f)); } 

其中getFactorColor方法是

 public static int getFactorColor(int color, float factor) { float[] hsv = new float[3]; Color.colorToHSV(color, hsv); hsv[2] *= factor; color = Color.HSVToColor(hsv); return color; } 

尝试为您的线性布局添加此android:fitsSystemWindows =“true”属性并查看。

在主题中添加?attr/colorPrimaryDark或以编程方式调用window.setNavigationBarColor(@ColorInt int color) 。 但是,请注意,自Android Lollipop(API 21)引入了navigationBarColor ,这意味着当API <21时不支持navigationBarColor

如果你在尝试所有这些之后不会过关。 只是使缓存无效并重新启动项目。 这肯定会奏效。