本文记录了隐藏状态栏和修改状态栏颜色以及电量、WiFi标志等内容的模式显示,亲测有效。
1、隐藏屏幕状态栏
public void hideStatusBar(BaseActivity activity) {
Window window = activity.getWindow();
//没有这一行无效
window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
WindowManager.LayoutParams attributes = window.getAttributes();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P){
Log.e(TAG, "onCreate: SDK_INT= "+ Build.VERSION.SDK_INT );
//如果没有这一行就会把状态栏变成纯黑的一条什么都看不清了
attributes.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
}
window.setAttributes(attributes);
}
隐藏状态栏让下面布局完全铺满屏幕。用手从上边向下滑动可以展示状态栏,但是过几秒会再次自动隐藏。这里提到的首次是因为你第一次滑下来的是隐藏的状态栏,过几秒会自动收回去,在状态栏露出来以后此时再次向下滑才是蓝牙、数据开关的通知栏。
要注意Build.VERSION_CODES.P以上需要设置:
attributes.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;如果没有这一行就会把状态栏变成纯黑的一条什么都看不清了
1.1 隐藏状态栏
StatusBarUtil.getInstance().hideStatusBar(this);
- 设置屏幕状态栏
与隐藏titleBar不同,这里是修改了状态栏的颜色,两个参数:第一代表设置的颜色,第二代表状态栏展示内容的深色和浅色两种UI样式,颜色值属于浅色;参数二需要传入true执行深色样式,否则可能造成状态栏内容看不清。
lightColor代表在黑白两个模式设置颜色,true展示wifi、电池、时间等为黑色,false时以上为白色,所以请设置色值的时候注意一下用哪个合适。比如黑色状态栏遇到深色模式的wifi、电池、时间,就会两眼一抹黑。
public void setStatusBar(BaseActivity activity,int color, boolean lightColor) {
Log.e("setStatusBar ", "currentThread: "+Thread.currentThread().getName() );
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
activity.getWindow().setStatusBarColor(color);
if (lightColor) {
activity.getWindow().getDecorView()
.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
} else {
activity.getWindow().getDecorView()
.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
}
}
2.1修改红色状态栏背景,浅色模式:
StatusBarUtil.getInstance().setStatusBar(BaseActivity.this, getResources().getColor(p), false);
2.2 修改红色状态栏背景,深色模式:
StatusBarUtil.getInstance().setStatusBar(BaseActivity.this, getResources().getColor(p), true);
注意:在hideStatusBar()隐藏状态栏的情况下再去设置状态栏颜色是不生效的,!!!