设置主题:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
</style>
设置沉浸式状态栏:
/**
* 设置沉浸式状态栏,并把状态栏颜色改为透明色
*/
public static void setStatusBar(Activity activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//5.0及以上
View decorView = activity.getWindow().getDecorView();
int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
option += View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
}
decorView.setSystemUiVisibility(option);
activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {//4.4到5.0
WindowManager.LayoutParams localLayoutParams = activity.getWindow().getAttributes();
localLayoutParams.flags = (WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | localLayoutParams.flags);
}
}
设置状态栏的背景色和给title设置间距:
/**
* 设置状态栏的背景色为title的背景色,如果有title,给title增加状态栏间距
*
* @param context context
* @param titleView titleView
* 调用示例
* WindowUtils.setStatusTitle(getContext(), bindId(R.id.ctl_title));
*/
public static void setStatusTitle(Context context, View titleView) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
if (titleView != null) {
int statusHeight = getStatusBarHeight(context);
ViewGroup.LayoutParams layoutParams = titleView.getLayoutParams();
//拿到根布局
ConstraintLayout layout = (ConstraintLayout) ((ViewGroup) titleView.getRootView().findViewById(android.R.id.content)).getChildAt(0);
//是否有添加状态栏View
View view = layout.findViewById(R.id.status_back);
if (view == null) {
view = new View(context);
//添加状态栏View
ConstraintLayout.LayoutParams params = new ConstraintLayout.LayoutParams(ConstraintLayout.LayoutParams.MATCH_PARENT, 0);
params.topToTop = ConstraintSet.PARENT_ID;
params.bottomToTop = titleView.getId();
layout.addView(view, params);
}
//设置间距
setLayoutMargin(layoutParams, 0, statusHeight, 0, 0);
//设置状态栏的背景色
ColorDrawable colorDrawable = (ColorDrawable) titleView.getBackground();
if (colorDrawable != null) {
//设置状态栏背景色为标题背景色
view.setBackgroundColor(colorDrawable.getColor());
//设置状态栏背景色为标题背景色
// ((Activity) context).getWindow().setStatusBarColor(colorDrawable.getColor());
}
} else {
//设置状态栏背景色为透明色
((Activity) context).getWindow().setStatusBarColor(Color.TRANSPARENT);
}
}
}
隐藏状态栏:
方法一:
getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN , WindowManager.LayoutParams. FLAG_FULLSCREEN); requestWindowFeature(Window.FEATURE_NO_TITLE);
方法二:
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
常用参数:
setSystemUiVisibility(int visibility)传入的实参类型如下:
1.View.SYSTEM_UI_FLAG_VISIBLE :状态栏和Activity共存,Activity不全屏显示。也就是应用平常的显示画面(默认模式)
2.View.SYSTEM_UI_FLAG_FULLSCREEN :Activity全屏显示,且状态栏被覆盖掉(完全沉浸式)
3. View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN :Activity全屏显示,但是状态栏不会被覆盖掉,而是正常显示,只是Activity顶层会被状态栏覆盖掉(沉浸式状态栏就是这个模式)
4.View.INVISIBLE : Activity全屏显示,隐藏状态栏(完全沉浸式,状态栏被隐藏掉)
还有一些实参类型没描述,根据需求需要,再去查看官方文档
设置状态栏电池电量的颜色:
/**
* 改变状态栏电量时间颜色
*
* @param activity activity
* @param isWhite 是否设置为白色
*/
public static void setStatusBarColor(Activity activity, boolean isWhite) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//5.0及以上
View decorView = activity.getWindow().getDecorView();
int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
if (!isWhite && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
option += View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
}
decorView.setSystemUiVisibility(option);
}
}