安卓笔记:
建议判断版本6.0以上做沉侵式:(5.0做的话可能会有界面让你很为难)
代码:
public void setStatusBar() { //6.0 以上直接设置状态栏颜色 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { Window window = getWindow(); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); //状态栏背景 //透明状态栏标题栏往上顶 相当于状态栏和标题栏重叠并透明 window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); window.setStatusBarColor(Color.TRANSPARENT); //部分手机状态栏背景色是半透明黑色 setStatusTextColor(true); //默认状态栏字体颜色为黑色(可能解决不了灰色遮罩) setTitleBarPadding(); //设置 paddingTop //7.0后部分手机出现灰色遮罩(绝对能解决) if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){ try { Class decorViewClazz = Class.forName("com.android.internal.policy.DecorView"); Field field = decorViewClazz.getDeclaredField("mSemiTransparentStatusBarColor"); field.setAccessible(true); field.setInt(getWindow().getDecorView(), Color.TRANSPARENT); //改为透明 } catch (Exception e) {} } } } /** * 利用反射获取状态栏高度 用于设置你标题栏的paddingtop值 */ public int getStatusBarHeight() { int result = 0; //获取状态栏高度的资源id int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android"); if (resourceId > 0) { result = getResources().getDimensionPixelSize(resourceId); } return result; } // 如果亮色,可以设置状态栏文字为黑色(备用方法) public boolean isLightColor(@ColorInt int color) { return ColorUtils.calculateLuminance(color) >= 0.5; } // 设置状态栏文字颜色 部分小米手机需要特殊处理 public void setStatusTextColor(boolean isBlack) { isBlack = BaseApplication.isStatusBarFontColorBlack; if (isBlack) { if (Build.MANUFACTURER.equalsIgnoreCase("xiaomi")){ setStatusBarDarkMode(true,this); } getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); } else { if (Build.MANUFACTURER.equalsIgnoreCase("xiaomi")){ setStatusBarDarkMode(false,this); } getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE); } } /** * 部分小米手机需要用到这个才能修改状态栏字体颜色 */ public void setStatusBarDarkMode(boolean darkmode, Activity activity) { Class<? extends Window> clazz = activity.getWindow().getClass(); try { int darkModeFlag = 0; Class<?> layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams"); Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE"); darkModeFlag = field.getInt(layoutParams); Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class); extraFlagField.invoke(activity.getWindow(), darkmode ? darkModeFlag : 0, darkModeFlag); } catch (Exception e) { e.printStackTrace(); } }
附图: