栏相关→BarUtils

 
   
  import android.annotation.TargetApi;
  import android.app.Activity;
  import android.content.Context;
  import android.graphics.Color;
  import android.os.Build;
  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 extendsView {
  public StatusBarView(Contextcontext, AttributeSet attrs) {
  super(context, attrs);
  }
   
  public StatusBarView(Contextcontext) {
  super(context);
  }
  }
   
  public static final int DEFAULT_STATUS_BAR_ALPHA= 112;
   
  /**
  * 设置状态栏颜色
  *
  * @param activity 需要设置的 activity
  * @param color 状态栏颜色值
  */
  public static void setColor(Activity activity, int color) {
  setColor(activity, color, DEFAULT_STATUS_BAR_ALPHA);
  }
   
  /**
  * 设置状态栏颜色
  *
  * @param activity 需要设置的activity
  * @param color 状态栏颜色值
  * @param statusBarAlpha 状态栏透明度
  */
   
  public static void setColor(Activity activity, 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(Activityactivity, int color) {
  setColorForSwipeBack(activity, color, DEFAULT_STATUS_BAR_ALPHA);
  }
   
  /**
  * 为滑动返回界面设置状态栏颜色
  *
  * @param activity 需要设置的activity
  * @param color 状态栏颜色值
  * @param statusBarAlpha 状态栏透明度
  */
  public static void setColorForSwipeBack(Activityactivity, 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(Activityactivity, int color) {
  setColor(activity, color, 0);
  }
   
  /**
  * 设置状态栏颜色(5.0以下无半透明效果,不建议使用)
  *
  * @param activity 需要设置的 activity
  * @param color 状态栏颜色值
  */
  @Deprecated
  public static void setColorDiff(Activityactivity, 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(Activityactivity) {
  setTranslucent(activity, DEFAULT_STATUS_BAR_ALPHA);
  }
   
  /**
  * 使状态栏半透明
  * <p>
  * 适用于图片作为背景的界面,此时需要图片填充到状态栏
  *
  * @param activity 需要设置的activity
  * @param statusBarAlpha 状态栏透明度
  */
  public static void setTranslucent(Activityactivity, 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(Activityactivity, int statusBarAlpha) {
  if (Build.VERSION.SDK_INT< Build.VERSION_CODES.KITKAT) {
  return;
  }
  transparentStatusBar(activity);
  addTranslucentView(activity, statusBarAlpha);
  }
   
  /**
  * 设置状态栏全透明
  *
  * @param activity 需要设置的activity
  */
  public static void setTransparent(Activityactivity) {
  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(Activityactivity) {
  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(Activityactivity, DrawerLayout drawerLayout,int color) {
  setColorForDrawerLayout(activity, drawerLayout, color, DEFAULT_STATUS_BAR_ALPHA);
  }
   
  /**
  * 为DrawerLayout 布局设置状态栏颜色,纯色
  *
  * @param activity 需要设置的activity
  * @param drawerLayout DrawerLayout
  * @param color 状态栏颜色值
  */
  public static void setColorNoTranslucentForDrawerLayout(Activityactivity, DrawerLayout drawerLayout,int color) {
  setColorForDrawerLayout(activity, drawerLayout, color, 0);
  }
   
  /**
  * 为DrawerLayout 布局设置状态栏变色
  *
  * @param activity 需要设置的activity
  * @param drawerLayout DrawerLayout
  * @param color 状态栏颜色值
  * @param statusBarAlpha 状态栏透明度
  */
  public static void setColorForDrawerLayout(Activityactivity, DrawerLayout drawerLayout,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 (!(contentLayoutinstanceof 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(Activityactivity, DrawerLayout drawerLayout,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 (!(contentLayoutinstanceof 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(Activityactivity, DrawerLayout drawerLayout) {
  setTranslucentForDrawerLayout(activity, drawerLayout, DEFAULT_STATUS_BAR_ALPHA);
  }
   
  /**
  * 为 DrawerLayout 布局设置状态栏透明
  *
  * @param activity 需要设置的activity
  * @param drawerLayout DrawerLayout
  * @param statusBarAlpha 透明度
  */
  public static void setTranslucentForDrawerLayout(Activityactivity, 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(Activityactivity, 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 (!(contentLayoutinstanceof 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(Activityactivity, 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(Activityactivity, View needOffsetView) {
  setTranslucentForImageView(activity, 0, needOffsetView);
  }
   
  /**
  * 为头部是 ImageView 的界面设置状态栏透明(使用默认透明度)
  *
  * @param activity 需要设置的activity
  * @param needOffsetView 需要向下偏移的 View
  */
  public static void setTranslucentForImageView(Activityactivity, View needOffsetView) {
  setTranslucentForImageView(activity, DEFAULT_STATUS_BAR_ALPHA, needOffsetView);
  }
   
  /**
  * 为头部是 ImageView 的界面设置状态栏透明
  *
  * @param activity 需要设置的activity
  * @param statusBarAlpha 状态栏透明度
  * @param needOffsetView 需要向下偏移的 View
  */
  public static void setTranslucentForImageView(Activityactivity, 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(Activityactivity, View needOffsetView) {
  setTranslucentForImageViewInFragment(activity, DEFAULT_STATUS_BAR_ALPHA, needOffsetView);
  }
   
  /**
  * 为 fragment 头部是 ImageView 的设置状态栏透明
  *
  * @param activity fragment 对应的 activity
  * @param needOffsetView 需要向下偏移的 View
  */
  public static void setTransparentForImageViewInFragment(Activityactivity, View needOffsetView) {
  setTranslucentForImageViewInFragment(activity, 0, needOffsetView);
  }
   
  /**
  * 为 fragment 头部是 ImageView 的设置状态栏透明
  *
  * @param activity fragment 对应的 activity
  * @param statusBarAlpha 状态栏透明度
  * @param needOffsetView 需要向下偏移的 View
  */
  public static void setTranslucentForImageViewInFragment(Activityactivity, 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(Activityactivity) {
  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(Activityactivity, 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 StatusBarViewcreateStatusBarView(Activityactivity, 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 StatusBarViewcreateStatusBarView(Activityactivity, 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(Activityactivity) {
  ViewGroup rootView = (ViewGroup) ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0);
  rootView.setFitsSystemWindows(true);
  rootView.setClipToPadding(true);
  }
   
  /**
  * 设置透明
  */
  private static void setTransparentForWindow(Activityactivity) {
  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(Activityactivity) {
  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 StatusBarViewcreateTranslucentStatusBarView(Activityactivity, 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(Contextcontext) {
  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(intcolor, 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;
  }
   
  /*--------------------------------old--------------------------------*/
   
  /**
  * 设置透明状态栏(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(Activityactivity) {
  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(Activityactivity) {
  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(Activityactivity) {
  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(Activityactivity) {
  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(Contextcontext, 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(Contextcontext) {
  String methodName = (Build.VERSION.SDK_INT<= 16) ? "collapse": "collapsePanels";
  invokePanels(context, methodName);
  }
   
  /**
  * 反射唤醒通知栏
  *
  * @param context 上下文
  * @param methodName 方法名
  */
  private static void invokePanels(Contextcontext, 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();
  }
  }
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值