自定义View系列(九)设置状态栏颜色

网上有很多第三方的改变状态栏颜色的代码,写法也不一样,今天我们自己来写一套,适配到Android4.4以上。

1.android5.0以上执行语句

5.0以上有系统的方法,比较好实现如下:

 if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP){
        //直接调用系统的方法
           activity.getWindow().setStatusBarColor(color);
 }
2.android4.4以上到5.0以下适配

因为android4.4以上到5.0以下系统没有提供方法,需要自己去实现,具体的实现思路--》把它设成全屏 ,在状态栏加一个布局
设置全屏

        activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

添加一个布局

    //状态栏添加一个布局
        View view=new View(activity);
        ViewGroup.LayoutParams params= new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,      getStatusBarHeight(activity));
        view.setLayoutParams(params );
        view.setBackgroundColor(color);

       ViewGroup decorView= (ViewGroup) activity.getWindow().getDecorView();
        decorView.addView(view, 0);

       ViewGroup contentView=(ViewGroup) activity.findViewById(android.R.id.content);

        View activityView = contentView.getChildAt(0);
        activityView.setFitsSystemWindows(true);
3.获取状态栏高度
private static int getStatusBarHeight(Activity activity){
   //先获取资源id,根据资源ID获取资源
  Resources resources= activity.getResources();
int identifier = resources.getIdentifier("status_bar_height", "dimen", "android");
return resources.getDimensionPixelOffset(identifier);
}

其实就那么简单,下面提供以下完整代码

public class StatusBarUtil {
/**
 *
 * @param activity
 * @param color
 */
public static void setStatusBarColor(Activity activity,int color){
    //5.0以上
    if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP){
        //直接调用系统的方法
           activity.getWindow().setStatusBarColor(color);

    }else if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.KITKAT){
      //4.4-5.0之间 采用一个技巧 ,首先把他能成全屏 ,在状态栏加一个布局
        //设置全屏
        activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

        //状态栏添加一个布局
        View view=new View(activity);
        ViewGroup.LayoutParams params= new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,     getStatusBarHeight(activity));
        view.setLayoutParams(params );
        view.setBackgroundColor(color);

       ViewGroup decorView= (ViewGroup) activity.getWindow().getDecorView();
        decorView.addView(view, 0);

       ViewGroup contentView=(ViewGroup) activity.findViewById(android.R.id.content);

        //1.方式一
        View activityView = contentView.getChildAt(0);
        activityView.setFitsSystemWindows(true);
        //方式二
        //            contentView.setPadding(0,getStatusBarHeight(activity),0,0);
        //方式三
       //            activityView.setPadding(0,getStatusBarHeight(activity),0,0);

    }

}

/**
 * 获取状态栏高度
 * @param activity
 * @return
 */
 private static int getStatusBarHeight(Activity activity){
   //先获取资源id,根据资源ID获取资源
  Resources resources= activity.getResources();
int identifier = resources.getIdentifier("status_bar_height", "dimen", "android");

return resources.getDimensionPixelOffset(identifier);
 }
 }

你可能感兴趣的:(自定义View系列(九)设置状态栏颜色)