安卓6.0后沉侵式改造

安卓笔记:

建议判断版本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();
      }
   }

 

附图:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值