Android从4.4的版本开始,就可以自己来定义状态栏的颜色了,下面,我们来看一下实现方式:
1:沉浸式状态栏的实现方式:
/**
* 设置状态栏的颜色
* 分为两种情况
* 1:当当前SDK版本在5.0及其以上版本中,直接设置状态栏颜色就可以(有对应的方法)
* 2:当当前SDK版本在4.4到5.0之间时,则需要向设置当前状态栏为全屏,
* 然后给其添加一个与StatusBar同等高度的View并设置padding值来处理
* @param activity
* @param color
*/
public static void setStatusBarColor(Activity activity,int color){
//1:SDK>=5.0
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
activity.getWindow().setStatusBarColor(color);
}
//2:SDK>=4.4
else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
//1:先将其设置成全屏模式 但是电量 信号条还得存在
//该设置会导致不显电量等图标
//activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//2给跟布局添加一个view
View view = new View(activity);
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,getStatusBarHeight(activity));
view.setLayoutParams(params);
view.setBackgroundColor(color);
ViewGroup mDecor = (ViewGroup) activity.getWindow().getDecorView();//FrameLayout
mDecor.addView(view);
//3:获取setContentView中的更布局 给其设置statusBar的padding值 或者设置其属性fitSystemWindows
ViewGroup content = (ViewGroup) activity.findViewById(android.R.id.content);
//content.getChildAt(0).setPadding(0,getStatusBarHeight(activity),0,0);
ViewGroup rootView = (ViewGroup) content.getChildAt(0);//我们写的布局的根布局
rootView.setFitsSystemWindows(true);
}
}
public static int getStatusBarHeight(Activity activity) {
Resources resources = activity.getResources();
int statusBarHeightId = resources.getIdentifier("status_bar_height","dimen","android");
int statusBarHeight = resources.getDimensionPixelOffset(statusBarHeightId);
Log.i("JUSTH","statusBarHeight ----->"+statusBarHeight);
return statusBarHeight;
}
上面就是实现的方法了,在实现的时候,我们需要判断当前手机的版本,如果在5.0及以上版本,是直接有方法来设置的。如果是介于4.4到5.0之间的版本,那就需要通过创建一个与statusBar等高的View来占位设置了!
最后:上一张效果图:(设置了比较明显的颜色,能够看得更清楚些)
2:下面,我们来看一下另外一种情况:
有的时候,为了界面美观以及一些其他原因,会有如下需求:
可以看到的是,我们这里已经全屏显示了,但是,电量型号等图标还是显示的,这种情况下,直接设置当前界面为全屏是不能够满足这种需求的:
下面,来看一下实现方法:
//设置屏幕为全屏且显示手机电量等图标
public static void setActivityTranslucent(Activity activity){
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
//当SDK大于等于5.0时,则获取到DecorView并设置SystemUiVisibility属性
View mDecor = activity.getWindow().getDecorView();
mDecor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
}else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
}
这个情况正好和沉浸式状态栏的相反,在sdk版本在4.4-5.0之间,有直接的设置方法,而在5.0以上,需要我们自己来实现,实现过程为,首先,获取到当前Activity的decorView,然后,给decorView设置SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN该属性,然后再将状态栏的颜色设置为透明色!