项目场景:
app需要根据不同的页面设置不同的状态栏颜色。
问题描述:
首先就是在设置之前需要先将状态栏的颜色设置为沉浸式的,这样的话他的背景色就是透明的
android:fitsSystemWindows="true"
把这个方法,放在需要设置状态栏颜色的页面的根部局里面。
然后就是在页面初始化的时候调用一个方法
public static void setStatus(Activity activity, int resouse) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { //系统版本大于19 setTranslucentStatus(activity, true); } //状态栏背景着色 SystemBarTintManager tintManager = new SystemBarTintManager(activity); tintManager.setStatusBarTintEnabled(true); tintManager.setStatusBarTintResource(resouse); //去除灰色遮罩 //Android5.0以上 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Window window = activity.getWindow(); window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.setStatusBarColor(Color.TRANSPARENT); } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {//Android4.4以上,5.0以下 activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); } }
public static void setTranslucentStatus(Activity activity, boolean on) { Window win = activity.getWindow(); WindowManager.LayoutParams winParams = win.getAttributes(); final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS; if (on) { winParams.flags |= bits; // a|=b的意思就是把a和b按位或然后赋值给a 按位或的意思就是先把a和b都换成2进制,然后用或操作,相当于a=a|b } else { winParams.flags &= ~bits; //&是位运算里面,与运算 a&=b相当于 a = a&b ~非运算符 } win.setAttributes(winParams); }
需要传入当前的activity 和你当前页面的需要实现的背景色。还可以避免状态栏出现灰色遮罩问题。
标签:状态栏,安卓,WindowManager,背景色,FLAG,VERSION,Build,activity From: https://blog.csdn.net/weixin_58623780/article/details/139442249