沉浸式

沉浸式就是利用系统状态栏,将背景图片延伸至系统状态栏区域内,效果就是和游戏应用画面那样。

Action1 隐藏状态栏和ActionBar

仅仅是隐藏状态栏和ActionBar,只是粗暴的隐藏了而已

//获取当前界面的DecorView
View decorView = getWindow().getDecorView();
//表示全屏,即隐藏状态栏
int option = View.SYSTEM_UI_FLAG_FULLSCREEN;
//设置系统UI元素可见性
decorView.setSystemUiVisibility(option);
ActionBar actionBar = getSupportActionBar();
//隐藏ActionBar
actionBar.hide();

Action2 透明状态栏

透明状态栏效果:背景图片延伸,而非隐藏。需要借助其他的UI Flag,且需要判断版本

//5.0以上才支持
if (Build.VERSION.SDK_INT>=21){
View decorView = getWindow().getDecorView();
//这两个Flag结合使用,才会让应用的主体内容占据系统状态栏的空间
int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
decorView.setSystemUiVisibility(option);
//将状态栏设置为透明色
getWindow().setStatusBarColor(Color.TRANSPARENT);
}
ActionBar actionBar = getSupportActionBar();
actionBar.hide();

至此,尚不能称为沉浸式状态栏,只能算是透明状态栏

Action3 隐藏导航栏

隐藏系统底部导航栏,需要设置UI FLAG。
缺陷:只要点击屏幕,就会退出该模式

View decorView = getWindow().getDecorView();
int option = View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
decorView.setSystemUiVisibility(option);
ActionBar actionBar = getSupportActionBar();
actionBar.hide();

Action4 综上

结合3种UI Flag,已经和真正的沉浸式很接近了

//5.0以上才支持
if (Build.VERSION.SDK_INT>=21){
View decorView = getWindow().getDecorView();
//3种Flag结合使用
int option = View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
decorView.setSystemUiVisibility(option);
//将状态栏设置为透明色
getWindow().setStatusBarColor(Color.TRANSPARENT);
//将系统底部导航栏设置为透明色
getWindow().setNavigationBarColor(Color.TRANSPARENT);
}
ActionBar actionBar = getSupportActionBar();
actionBar.hide();

SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN这种UI Flag,会让应用的主体内容延伸进入系统底部导航栏的空间

原创文章 205获赞 256访问量 6万+

关注
私信

展开阅读全文

作者:墨玉浮白

相关推荐

Flutter 透明状态栏及字体颜色的设置方法

python+selenium+Chrome options参数的使用

python GUI库图形界面开发之PyQt5状态栏控件QStatusBar详细使用方法实例

Android 8.1隐藏状态栏图标的实例代码