网上有很多第三方的改变状态栏颜色的代码,写法也不一样,今天我们自己来写一套,适配到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);
}
}
网友评论