相信很多人在开发app的时候,都会碰到xml中header的状态栏颜色和系统手机自带的颜色(顶部手机状态条)不一致,查了好多资料;例如:去掉状态栏以及全屏显示等,可以参考下面这篇文章
这里总结另外一种方法(actionBar已经去掉了,动态修改顶部手机状态条):
先上图,看看使用前后的区别
图1.
图2.
解决办法:
/**
* @author Martin-harry
* @date 2021/8/10
* @address
* @Desc 系统状态栏颜色
*/
public class StatusBarUtils {
public static void setWindowStatusBarColor(Activity activity, int colorResId) {
try {
//获取sdk的api,如果大于等于5.0
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = activity.getWindow();
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);//状态栏颜色(6.0以上才可以)
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(activity.getResources().getColor(colorResId));
//底部导航栏
//window.setNavigationBarColor(activity.getResources().getColor(colorResId));
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void setWindowStatusBarColorText(Activity activity, int colorResId) {
try {
//获取sdk的api,如果大于等于5.0
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = activity.getWindow();
// window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);//状态栏颜色(6.0以上才可以)
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(activity.getResources().getColor(colorResId));
//底部导航栏
//window.setNavigationBarColor(activity.getResources().getColor(colorResId));
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void setWindowStatusBarColor(Dialog dialog, int colorResId) {
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = dialog.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(dialog.getContext().getResources().getColor(colorResId));
window.setNavigationBarColor(Color.TRANSPARENT);
//底部导航栏
//window.setNavigationBarColor(activity.getResources().getColor(colorResId));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
具体使用方法:
调用这个StatusBarUtils 可以在自己封装的activity基类里面去调用,或者全局的application中去写,代码如下:
//设置状态栏颜色 根据自己的需求去写
public void setStatusBg(int i){
if(i == 1){
StatusBarUtils.setWindowStatusBarColor(this, R.color.sliver);//设置状态栏颜色为银白色
}else if(i == 2){
StatusBarUtils.setWindowStatusBarColorText(this, R.color.white);//设置状态栏颜色为白色
}else if(i == 3){
StatusBarUtils.setWindowStatusBarColor(this, R.color.colorAccent);//设置状态栏颜色为绿色
}else if(i == 4){
StatusBarUtils.setWindowStatusBarColor(this, R.color.splashColr);//设置状态栏颜色为印度红色
}
}
下面是我自己调用的过程