前言
预备知识
Window#setFlags
View#setSystemUiVisibility (Android 3.0开始提供)
WindowManager.LayoutParams.FLAG_FULLSCREEN
隐藏状态栏
View.SYSTEM_UI_FLAG_VISIBLE API 14
默认标记
View.SYSTEM_UI_FLAG_LOW_PROFILE API 14
低调模式, 会隐藏不重要的状态栏图标
View.SYSTEM_UI_FLAG_LAYOUT_STABLE API 16
保持整个View稳定, 常和控制System UI悬浮, 隐藏的Flags共用, 使View不会因为System UI的变化而重新layout
View.SYSTEM_UI_FLAG_FULLSCREEN API 16
状态栏隐藏,效果同设置WindowManager.LayoutParams.FLAG_FULLSCREEN
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN API 16
视图延伸至状态栏区域,状态栏上浮于视图之上
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION API 14
隐藏导航栏
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION API 16
视图延伸至导航栏区域,导航栏上浮于视图之上
View.SYSTEM_UI_FLAG_IMMERSIVE API 19
沉浸模式, 隐藏状态栏和导航栏, 并且在第一次会弹泡提醒, 并且在状态栏区域滑动可以呼出状态栏(这样会系统会清楚之前设置的View.SYSTEM_UI_FLAG_FULLSCREEN或View.SYSTEM_UI_FLAG_HIDE_NAVIGATION标志)。使之生效,需要和View.SYSTEM_UI_FLAG_FULLSCREEN,View.SYSTEM_UI_FLAG_HIDE_NAVIGATION中的一个或两个同时设置。
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY API 19
与上面唯一的区别是, 呼出隐藏的状态栏后不会清除之前设置的View.SYSTEM_UI_FLAG_FULLSCREEN或View.SYSTEM_UI_FLAG_HIDE_NAVIGATION标志,在一段时间后将再次隐藏系统栏)
以上内容,以及本文灵感来自于
作者:Lollo链接:https://www.jianshu.com/p/11a2b780fd9b来源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
具体实现
private void init() {
mActionBar = getSupportActionBar();
mActionBar.hide();
mWelcome=findViewById(R.id.welcome);
mVideo=findViewById(R.id.video);
mGame=findViewById(R.id.game);
decorView= getWindow().getDecorView();
mWelcome.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setmWelcomeStatusBar();//欢迎界面
}
});
mVideo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setmVideoStatusBar();
}
});
mGame.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setmGameStatusBar();
}
});
}
void setmWelcomeStatusBar() {
if (Build.VERSION.SDK_INT >= 21) {
int option = WindowManager.LayoutParams.FLAG_FULLSCREEN
|View.SYSTEM_UI_FLAG_FULLSCREEN
|View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
decorView.setSystemUiVisibility(option);
}
}
private void setmVideoStatusBar() {
if (Build.VERSION.SDK_INT >= 21) {
int option = WindowManager.LayoutParams.FLAG_FULLSCREEN
|View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
|View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
decorView.setSystemUiVisibility(option);
getWindow().setStatusBarColor(Color.TRANSPARENT);
}
}
private void setmGameStatusBar() {
if (Build.VERSION.SDK_INT >= 21) {
int option = WindowManager.LayoutParams.FLAG_FULLSCREEN
|View.SYSTEM_UI_FLAG_FULLSCREEN
|View.SYSTEM_UI_FLAG_LAYOUT_STABLE
|View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
decorView.setSystemUiVisibility(option);
}
}
方法拓展
decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
if(visibility==View.VISIBLE){
Toast.makeText(getApplicationContext(),"当前状态栏已显示",Toast.LENGTH_LONG).show();
}else {
Toast.makeText(getApplicationContext(),"当前状态栏已隐藏",Toast.LENGTH_LONG).show();
}
}
});