content: package com.rsen.github.androidutilcode;
  
  import android.annotation.TargetApi;
  import android.app.Activity;
  import android.content.Context;
  import android.graphics.Color;
  import android.media.audiofx.BassBoost;
  import android.os.Build;
  import android.support.annotation.ColorInt;
  import android.support.v4.widget.DrawerLayout;
  import android.util.AttributeSet;
  import android.util.TypedValue;
  import android.view.View;
  import android.view.ViewGroup;
  import android.view.Window;
  import android.view.WindowManager;
  import android.widget.LinearLayout;
  
  import java.lang.reflect.Method;
  
  /**
   * <pre>
   *     author: Blankj
   *     blog  : http://blankj.com
   *     time  : 2016/9/23
   *     desc  : 栏相关工具类
   * </pre>
   */
  public class BarUtils {
      private BarUtils() {
          throw new UnsupportedOperationException("u can't instantiate me...");
      }
  
      public static class StatusBarView extends View {
          public StatusBarView(Context context, AttributeSet attrs) {
              super(context, attrs);
          }
  
          public StatusBarView(Context context) {
              super(context);
          }
      }
  
      public static final int DEFAULT_STATUS_BAR_ALPHA = 112;
  
      /**
       * 设置状态栏颜色
       *
       * @param activity 需要设置的 activity
       * @param color    状态栏颜色值
       */
      public static void setColor(Activity activity, @ColorInt int color) {
          setColor(activity, color, DEFAULT_STATUS_BAR_ALPHA);
      }
  
      /**
       * 设置状态栏颜色
       *
       * @param activity       需要设置的activity
       * @param color          状态栏颜色值
       * @param statusBarAlpha 状态栏透明度
       */
  
      public static void setColor(Activity activity, @ColorInt int color, int statusBarAlpha) {
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
              activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
              activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
              activity.getWindow().setStatusBarColor(calculateStatusColor(color, statusBarAlpha));
          } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
              activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
              ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();
              int count = decorView.getChildCount();
              if (count > 0 && decorView.getChildAt(count - 1) instanceof StatusBarView) {
                  decorView.getChildAt(count - 1).setBackgroundColor(calculateStatusColor(color, statusBarAlpha));
              } else {
                  StatusBarView statusView = createStatusBarView(activity, color, statusBarAlpha);
                  decorView.addView(statusView);
              }
              setRootView(activity);
          }
      }
  
      /**
       * 为滑动返回界面设置状态栏颜色
       *
       * @param activity 需要设置的activity
       * @param color    状态栏颜色值
       */
      public static void setColorForSwipeBack(Activity activity, @ColorInt int color) {
          setColorForSwipeBack(activity, color, DEFAULT_STATUS_BAR_ALPHA);
      }
  
      /**
       * 为滑动返回界面设置状态栏颜色
       *
       * @param activity       需要设置的activity
       * @param color          状态栏颜色值
       * @param statusBarAlpha 状态栏透明度
       */
      public static void setColorForSwipeBack(Activity activity, @ColorInt int color, int statusBarAlpha) {
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
              ViewGroup contentView = ((ViewGroup) activity.findViewById(android.R.id.content));
              contentView.setPadding(0, getStatusBarHeight(activity), 0, 0);
              contentView.setBackgroundColor(calculateStatusColor(color, statusBarAlpha));
              setTransparentForWindow(activity);
          }
      }
  
      /**
       * 设置状态栏纯色 不加半透明效果
       *
       * @param activity 需要设置的 activity
       * @param color    状态栏颜色值
       */
      public static void setColorNoTranslucent(Activity activity, @ColorInt int color) {
          setColor(activity, color, 0);
      }
  
      /**
       * 设置状态栏颜色(5.0以下无半透明效果,不建议使用)
       *
       * @param activity 需要设置的 activity
       * @param color    状态栏颜色值
       */
      @Deprecated
      public static void setColorDiff(Activity activity, @ColorInt int color) {
          if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
              return;
          }
          activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
          // 生成一个状态栏大小的矩形
          ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();
          int count = decorView.getChildCount();
          if (count > 0 && decorView.getChildAt(count - 1) instanceof StatusBarView) {
              decorView.getChildAt(count - 1).setBackgroundColor(color);
          } else {
              StatusBarView statusView = createStatusBarView(activity, color);
              decorView.addView(statusView);
          }
          setRootView(activity);
      }
  
      /**
       * 使状态栏半透明
       * <p>
       * 适用于图片作为背景的界面,此时需要图片填充到状态栏
       *
       * @param activity 需要设置的activity
       */
      public static void setTranslucent(Activity activity) {
          setTranslucent(activity, DEFAULT_STATUS_BAR_ALPHA);
      }
  
      /**
       * 使状态栏半透明
       * <p>
       * 适用于图片作为背景的界面,此时需要图片填充到状态栏
       *
       * @param activity       需要设置的activity
       * @param statusBarAlpha 状态栏透明度
       */
      public static void setTranslucent(Activity activity, int statusBarAlpha) {
          if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
              return;
          }
          setTransparent(activity);
          addTranslucentView(activity, statusBarAlpha);
      }
  
      /**
       * 针对根布局是 CoordinatorLayout, 使状态栏半透明
       * <p>
       * 适用于图片作为背景的界面,此时需要图片填充到状态栏
       *
       * @param activity       需要设置的activity
       * @param statusBarAlpha 状态栏透明度
       */
      public static void setTranslucentForCoordinatorLayout(Activity activity, int statusBarAlpha) {
          if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
              return;
          }
          transparentStatusBar(activity);
          addTranslucentView(activity, statusBarAlpha);
      }
  
      /**
       * 设置状态栏全透明
       *
       * @param activity 需要设置的activity
       */
      public static void setTransparent(Activity activity) {
          if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
              return;
          }
          transparentStatusBar(activity);
          setRootView(activity);
      }
  
      /**
       * 使状态栏透明(5.0以上半透明效果,不建议使用)
       * <p>
       * 适用于图片作为背景的界面,此时需要图片填充到状态栏
       *
       * @param activity 需要设置的activity
       */
      @Deprecated
      public static void setTranslucentDiff(Activity activity) {
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
              // 设置状态栏透明
              activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
              setRootView(activity);
          }
      }
  
      /**
       * 为DrawerLayout 布局设置状态栏变色
       *
       * @param activity     需要设置的activity
       * @param drawerLayout DrawerLayout
       * @param color        状态栏颜色值
       */
      public static void setColorForDrawerLayout(Activity activity, DrawerLayout drawerLayout, @ColorInt int color) {
          setColorForDrawerLayout(activity, drawerLayout, color, DEFAULT_STATUS_BAR_ALPHA);
      }
  
      /**
       * 为DrawerLayout 布局设置状态栏颜色,纯色
       *
       * @param activity     需要设置的activity
       * @param drawerLayout DrawerLayout
       * @param color        状态栏颜色值
       */
      public static void setColorNoTranslucentForDrawerLayout(Activity activity, DrawerLayout drawerLayout, @ColorInt int color) {
          setColorForDrawerLayout(activity, drawerLayout, color, 0);
      }
  
      /**
       * 为DrawerLayout 布局设置状态栏变色
       *
       * @param activity       需要设置的activity
       * @param drawerLayout   DrawerLayout
       * @param color          状态栏颜色值
       * @param statusBarAlpha 状态栏透明度
       */
      public static void setColorForDrawerLayout(Activity activity, DrawerLayout drawerLayout, @ColorInt int color,
                                                 int statusBarAlpha) {
          if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
              return;
          }
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
              activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
              activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
              activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
          } else {
              activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
          }
          // 生成一个状态栏大小的矩形
          // 添加 statusBarView 到布局中
          ViewGroup contentLayout = (ViewGroup) drawerLayout.getChildAt(0);
          if (contentLayout.getChildCount() > 0 && contentLayout.getChildAt(0) instanceof StatusBarView) {
              contentLayout.getChildAt(0).setBackgroundColor(calculateStatusColor(color, statusBarAlpha));
          } else {
              StatusBarView statusBarView = createStatusBarView(activity, color);
              contentLayout.addView(statusBarView, 0);
          }
          // 内容布局不是 LinearLayout 时,设置padding top
          if (!(contentLayout instanceof LinearLayout) && contentLayout.getChildAt(1) != null) {
              contentLayout.getChildAt(1)
                      .setPadding(contentLayout.getPaddingLeft(), getStatusBarHeight(activity) + contentLayout.getPaddingTop(),
                              contentLayout.getPaddingRight(), contentLayout.getPaddingBottom());
          }
          // 设置属性
          ViewGroup drawer = (ViewGroup) drawerLayout.getChildAt(1);
          drawerLayout.setFitsSystemWindows(false);
          contentLayout.setFitsSystemWindows(false);
          contentLayout.setClipToPadding(true);
          drawer.setFitsSystemWindows(false);
  
          addTranslucentView(activity, statusBarAlpha);
      }
  
      /**
       * 为DrawerLayout 布局设置状态栏变色(5.0以下无半透明效果,不建议使用)
       *
       * @param activity     需要设置的activity
       * @param drawerLayout DrawerLayout
       * @param color        状态栏颜色值
       */
      @Deprecated
      public static void setColorForDrawerLayoutDiff(Activity activity, DrawerLayout drawerLayout, @ColorInt int color) {
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
              activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
              // 生成一个状态栏大小的矩形
              ViewGroup contentLayout = (ViewGroup) drawerLayout.getChildAt(0);
              if (contentLayout.getChildCount() > 0 && contentLayout.getChildAt(0) instanceof StatusBarView) {
                  contentLayout.getChildAt(0).setBackgroundColor(calculateStatusColor(color, DEFAULT_STATUS_BAR_ALPHA));
              } else {
                  // 添加 statusBarView 到布局中
                  StatusBarView statusBarView = createStatusBarView(activity, color);
                  contentLayout.addView(statusBarView, 0);
              }
              // 内容布局不是 LinearLayout 时,设置padding top
              if (!(contentLayout instanceof LinearLayout) && contentLayout.getChildAt(1) != null) {
                  contentLayout.getChildAt(1).setPadding(0, getStatusBarHeight(activity), 0, 0);
              }
              // 设置属性
              ViewGroup drawer = (ViewGroup) drawerLayout.getChildAt(1);
              drawerLayout.setFitsSystemWindows(false);
              contentLayout.setFitsSystemWindows(false);
              contentLayout.setClipToPadding(true);
              drawer.setFitsSystemWindows(false);
          }
      }
  
      /**
       * 为 DrawerLayout 布局设置状态栏透明
       *
       * @param activity     需要设置的activity
       * @param drawerLayout DrawerLayout
       */
      public static void setTranslucentForDrawerLayout(Activity activity, DrawerLayout drawerLayout) {
          setTranslucentForDrawerLayout(activity, drawerLayout, DEFAULT_STATUS_BAR_ALPHA);
      }
  
      /**
       * 为 DrawerLayout 布局设置状态栏透明
       *
       * @param activity     需要设置的activity
       * @param drawerLayout DrawerLayout
       */
      public static void setTranslucentForDrawerLayout(Activity activity, DrawerLayout drawerLayout, int statusBarAlpha) {
          if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
              return;
          }
          setTransparentForDrawerLayout(activity, drawerLayout);
          addTranslucentView(activity, statusBarAlpha);
      }
  
      /**
       * 为 DrawerLayout 布局设置状态栏透明
       *
       * @param activity     需要设置的activity
       * @param drawerLayout DrawerLayout
       */
      public static void setTransparentForDrawerLayout(Activity activity, DrawerLayout drawerLayout) {
          if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
              return;
          }
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
              activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
              activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
              activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
          } else {
              activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
          }
  
          ViewGroup contentLayout = (ViewGroup) drawerLayout.getChildAt(0);
          // 内容布局不是 LinearLayout 时,设置padding top
          if (!(contentLayout instanceof LinearLayout) && contentLayout.getChildAt(1) != null) {
              contentLayout.getChildAt(1).setPadding(0, getStatusBarHeight(activity), 0, 0);
          }
  
          // 设置属性
          ViewGroup drawer = (ViewGroup) drawerLayout.getChildAt(1);
          drawerLayout.setFitsSystemWindows(false);
          contentLayout.setFitsSystemWindows(false);
          contentLayout.setClipToPadding(true);
          drawer.setFitsSystemWindows(false);
      }
  
      /**
       * 为 DrawerLayout 布局设置状态栏透明(5.0以上半透明效果,不建议使用)
       *
       * @param activity     需要设置的activity
       * @param drawerLayout DrawerLayout
       */
      @Deprecated
      public static void setTranslucentForDrawerLayoutDiff(Activity activity, DrawerLayout drawerLayout) {
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
              // 设置状态栏透明
              activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
              // 设置内容布局属性
              ViewGroup contentLayout = (ViewGroup) drawerLayout.getChildAt(0);
              contentLayout.setFitsSystemWindows(true);
              contentLayout.setClipToPadding(true);
              // 设置抽屉布局属性
              ViewGroup vg = (ViewGroup) drawerLayout.getChildAt(1);
              vg.setFitsSystemWindows(false);
              // 设置 DrawerLayout 属性
              drawerLayout.setFitsSystemWindows(false);
          }
      }
  
      /**
       * 为头部是 ImageView 的界面设置状态栏全透明
       *
       * @param activity       需要设置的activity
       * @param needOffsetView 需要向下偏移的 View
       */
      public static void setTransparentForImageView(Activity activity, View needOffsetView) {
          setTranslucentForImageView(activity, 0, needOffsetView);
      }
  
      /**
       * 为头部是 ImageView 的界面设置状态栏透明(使用默认透明度)
       *
       * @param activity       需要设置的activity
       * @param needOffsetView 需要向下偏移的 View
       */
      public static void setTranslucentForImageView(Activity activity, View needOffsetView) {
          setTranslucentForImageView(activity, DEFAULT_STATUS_BAR_ALPHA, needOffsetView);
      }
  
      /**
       * 为头部是 ImageView 的界面设置状态栏透明
       *
       * @param activity       需要设置的activity
       * @param statusBarAlpha 状态栏透明度
       * @param needOffsetView 需要向下偏移的 View
       */
      public static void setTranslucentForImageView(Activity activity, int statusBarAlpha, View needOffsetView) {
          if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
              return;
          }
          setTransparentForWindow(activity);
          addTranslucentView(activity, statusBarAlpha);
          if (needOffsetView != null) {
              ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) needOffsetView.getLayoutParams();
              layoutParams.setMargins(0, getStatusBarHeight(activity), 0, 0);
          }
      }
  
      /**
       * 为 fragment 头部是 ImageView 的设置状态栏透明
       *
       * @param activity       fragment 对应的 activity
       * @param needOffsetView 需要向下偏移的 View
       */
      public static void setTranslucentForImageViewInFragment(Activity activity, View needOffsetView) {
          setTranslucentForImageViewInFragment(activity, DEFAULT_STATUS_BAR_ALPHA, needOffsetView);
      }
  
      /**
       * 为 fragment 头部是 ImageView 的设置状态栏透明
       *
       * @param activity       fragment 对应的 activity
       * @param needOffsetView 需要向下偏移的 View
       */
      public static void setTransparentForImageViewInFragment(Activity activity, View needOffsetView) {
          setTranslucentForImageViewInFragment(activity, 0, needOffsetView);
      }
  
      /**
       * 为 fragment 头部是 ImageView 的设置状态栏透明
       *
       * @param activity       fragment 对应的 activity
       * @param statusBarAlpha 状态栏透明度
       * @param needOffsetView 需要向下偏移的 View
       */
      public static void setTranslucentForImageViewInFragment(Activity activity, int statusBarAlpha, View needOffsetView) {
          setTranslucentForImageView(activity, statusBarAlpha, needOffsetView);
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
              clearPreviousSetting(activity);
          }
      }
  
      ///////////////////////////////////////////////////////////////////////////////////
  
      @TargetApi(Build.VERSION_CODES.KITKAT)
      private static void clearPreviousSetting(Activity activity) {
          ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();
          int count = decorView.getChildCount();
          if (count > 0 && decorView.getChildAt(count - 1) instanceof StatusBarView) {
              decorView.removeViewAt(count - 1);
              ViewGroup rootView = (ViewGroup) ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0);
              rootView.setPadding(0, 0, 0, 0);
          }
      }
  
      /**
       * 添加半透明矩形条
       *
       * @param activity       需要设置的 activity
       * @param statusBarAlpha 透明值
       */
      private static void addTranslucentView(Activity activity, int statusBarAlpha) {
          ViewGroup contentView = (ViewGroup) activity.findViewById(android.R.id.content);
          if (contentView.getChildCount() > 1) {
              contentView.getChildAt(1).setBackgroundColor(Color.argb(statusBarAlpha, 0, 0, 0));
          } else {
              contentView.addView(createTranslucentStatusBarView(activity, statusBarAlpha));
          }
      }
  
      /**
       * 生成一个和状态栏大小相同的彩色矩形条
       *
       * @param activity 需要设置的 activity
       * @param color    状态栏颜色值
       * @return 状态栏矩形条
       */
      private static StatusBarView createStatusBarView(Activity activity, int color) {
          // 绘制一个和状态栏一样高的矩形
          StatusBarView statusBarView = new StatusBarView(activity);
          LinearLayout.LayoutParams params =
                  new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight(activity));
          statusBarView.setLayoutParams(params);
          statusBarView.setBackgroundColor(color);
          return statusBarView;
      }
  
      /**
       * 生成一个和状态栏大小相同的半透明矩形条
       *
       * @param activity 需要设置的activity
       * @param color    状态栏颜色值
       * @param alpha    透明值
       * @return 状态栏矩形条
       */
      private static StatusBarView createStatusBarView(Activity activity, @ColorInt int color, int alpha) {
          // 绘制一个和状态栏一样高的矩形
          StatusBarView statusBarView = new StatusBarView(activity);
          LinearLayout.LayoutParams params =
                  new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight(activity));
          statusBarView.setLayoutParams(params);
          statusBarView.setBackgroundColor(calculateStatusColor(color, alpha));
          return statusBarView;
      }
  
      /**
       * 设置根布局参数
       */
      @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
      private static void setRootView(Activity activity) {
          ViewGroup rootView = (ViewGroup) ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0);
          rootView.setFitsSystemWindows(true);
          rootView.setClipToPadding(true);
      }
  
      /**
       * 设置透明
       */
      private static void setTransparentForWindow(Activity activity) {
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
              activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
              activity.getWindow()
                      .getDecorView()
                      .setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
          } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
              activity.getWindow()
                      .setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
          }
      }
  
      /**
       * 使状态栏透明
       */
      @TargetApi(Build.VERSION_CODES.KITKAT)
      private static void transparentStatusBar(Activity activity) {
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
              activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
              activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
              activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
              activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
          } else {
              activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
          }
      }
  
      /**
       * 创建半透明矩形 View
       *
       * @param alpha 透明值
       * @return 半透明 View
       */
      private static StatusBarView createTranslucentStatusBarView(Activity activity, int alpha) {
          // 绘制一个和状态栏一样高的矩形
          StatusBarView statusBarView = new StatusBarView(activity);
          LinearLayout.LayoutParams params =
                  new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight(activity));
          statusBarView.setLayoutParams(params);
          statusBarView.setBackgroundColor(Color.argb(alpha, 0, 0, 0));
          return statusBarView;
      }
  
      /**
       * 获取状态栏高度
       *
       * @param context context
       * @return 状态栏高度
       */
      public static int getStatusBarHeight(Context context) {
          int result = -1;
          int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
          if (resourceId > 0) {
              result = context.getResources().getDimensionPixelSize(resourceId);
          }
          return result;
      }
  
      /**
       * 计算状态栏颜色
       *
       * @param color color值
       * @param alpha alpha值
       * @return 最终的状态栏颜色
       */
      private static int calculateStatusColor(int color, int alpha) {
          float a = 1 - alpha / 255f;
          int red = color >> 16 & 0xff;
          int green = color >> 8 & 0xff;
          int blue = color & 0xff;
          red = (int) (red * a + 0.5);
          green = (int) (green * a + 0.5);
          blue = (int) (blue * a + 0.5);
          return 0xff << 24 | red << 16 | green << 8 | blue;
      }
  
  
      /**
       * 设置透明状态栏(api大于19方可使用)
       * <p>可在Activity的onCreat()中调用</p>
       * <p>需在顶部控件布局中加入以下属性让内容出现在状态栏之下</p>
       * <p>android:clipToPadding="true"</p>
       * <p>android:fitsSystemWindows="true"</p>
       *
       * @param activity activity
       */
      public static void setTransparentStatusBar(Activity activity) {
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
              //透明状态栏
              activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
              //透明导航栏
              activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
          }
      }
  
      /**
       * 隐藏状态栏
       * <p>也就是设置全屏，一定要在setContentView之前调用，否则报错</p>
       * <p>此方法Activity可以继承AppCompatActivity</p>
       * <p>启动的时候状态栏会显示一下再隐藏，比如QQ的欢迎界面</p>
       * <p>在配置文件中Activity加属性android:theme="@android:style/Theme.NoTitleBar.Fullscreen"</p>
       * <p>如加了以上配置Activity不能继承AppCompatActivity，会报错</p>
       *
       * @param activity activity
       */
      public static void hideStatusBar(Activity activity) {
          activity.requestWindowFeature(Window.FEATURE_NO_TITLE);
          activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                  WindowManager.LayoutParams.FLAG_FULLSCREEN);
      }
  
      /**
       * 判断状态栏是否存在
       *
       * @param activity activity
       * @return {@code true}: 存在<br>{@code false}: 不存在
       */
      public static boolean isStatusBarExists(Activity activity) {
          WindowManager.LayoutParams params = activity.getWindow().getAttributes();
          return (params.flags & WindowManager.LayoutParams.FLAG_FULLSCREEN) != WindowManager.LayoutParams.FLAG_FULLSCREEN;
      }
  
      /**
       * 获取ActionBar高度
       *
       * @param activity activity
       * @return ActionBar高度
       */
      public static int getActionBarHeight(Activity activity) {
          TypedValue tv = new TypedValue();
          if (activity.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)) {
              return TypedValue.complexToDimensionPixelSize(tv.data, activity.getResources().getDisplayMetrics());
          }
          return 0;
      }
  
      /**
       * 显示通知栏
       * <p>需添加权限 {@code <uses-permission android:name="android.permission.EXPAND_STATUS_BAR"/>}</p>
       *
       * @param context        上下文
       * @param isSettingPanel {@code true}: 打开设置<br>{@code false}: 打开通知
       */
      public static void showNotificationBar(Context context, boolean isSettingPanel) {
          String methodName = (Build.VERSION.SDK_INT <= 16) ? "expand"
                  : (isSettingPanel ? "expandSettingsPanel" : "expandNotificationsPanel");
          invokePanels(context, methodName);
      }
  
      /**
       * 隐藏通知栏
       * <p>需添加权限 {@code <uses-permission android:name="android.permission.EXPAND_STATUS_BAR"/>}</p>
       *
       * @param context 上下文
       */
      public static void hideNotificationBar(Context context) {
          String methodName = (Build.VERSION.SDK_INT <= 16) ? "collapse" : "collapsePanels";
          invokePanels(context, methodName);
      }
  
      /**
       * 反射唤醒通知栏
       *
       * @param context    上下文
       * @param methodName 方法名
       */
      private static void invokePanels(Context context, String methodName) {
          try {
              Object service = context.getSystemService("statusbar");
              Class<?> statusBarManager = Class.forName("android.app.StatusBarManager");
              Method expand = statusBarManager.getMethod(methodName);
              expand.invoke(service);
          } catch (Exception e) {
              e.printStackTrace();
          }
      }
  }
  