Android 状态栏(StatusBar)和虚拟键(NavigationBar)的一些设置
2016-11-04 15:01
447 查看
最近写项目想写跟IOS一样的沉浸式模式,在写项目中用到的知识在这里记录一下(这个必须要在4.0以上的系统才能有效)
首先弄明白的是什么是StatusBar ,什么是NavigationBar 。用一张图来说明一下状态栏(StatusBar)
.
.
.
虚拟键(NavigationBar)
StatusBar和NavigationBar的统称为SystemBar
StatusBar与NavigationBar的控制方法如下
View decorView = getWindow().getDecorView(); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE//状态栏(StatusBar)和虚拟键(NavigationBar)都显示 | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);//页面到最顶部,状态栏不会隐藏,页面处于状态栏(StatusBar)的下面
上面的setSystemUiVisibility这个方法是控制SystemBar状态的显示 隐藏 。其中setSystemUiVisibility中的参数(常用参数)的作用如下:
INVISIBLE 状态栏(StatusBar)隐藏 SYSTEM_UI_FLAG_VISIBLE :状态栏(StatusBar)和虚拟键(NavigationBar)都显示,不全屏 SYSTEM_UI_FLAG_HIDE_NAVIGATION //隐藏虚拟按钮(NavigationBar),当页面滑动时候会重新出现 SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION //让页面在虚拟按钮(NavigationBar)的下面,虚拟按钮会挡住页面 SYSTEM_UI_FLAG_FULLSCREEN //状态栏(StatusBar)会被隐藏,页面到屏幕最顶部 SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN //页面到最顶部,状态栏不会隐藏,页面处于状态栏(StatusBar)的下面 SYSTEM_UI_FLAG_LOW_PROFILE //状态栏(StatusBar)和虚拟键 (NavigationBar)显示处于低能显示状态(low profile模式),状态栏上一些图标显示会被隐藏。
注:设置多个标志位时要用 | 连接起来,不能多次调用 setSystemUiVisibility。不同的组合SystemBar会有不同的效果
当能控制SystemBar的状态后,接下来设置SystemBar的背景颜色(setStatusBarColor这个方法只有在5.0以上的版本在会有。在5.0以上的版本的状态栏StatusBar有颜色的,所以用setStatusBarColor设置状态栏的颜色)
if (android.os.Build.VERSION.SDK_INT >= 21) { getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);//让NavigationBar也为透明颜色 getWindow().setStatusBarColor(Color.TRANSPARENT);//状态栏(StatusBar)背景设置颜色 } else if (android.os.Build.VERSION.SDK_INT >= 14) { getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);//透明状态栏(StatusBar) //getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);//让NavigationBar也为透明颜色 }else { //在4.0以下就没有setSystemUiVisibility这个方法(隐藏状态栏(StatusBar)) }
上面我把//getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION)这个方法给屏蔽了,是因为在设置这个flags后NavigationBar处于透明状态,但是会覆盖在页面上,会挡住页面。目前还没有找到方法处理这个问题
还有要提到的是SystemBar的监听方法
View decorView = getWindow().getDecorView(); decorView .setOnSystemUiVisibilityChangeListener(new OnSystemUiVisibilityChangeListener() { @Override public void onSystemUiVisibilityChange(int visibility) { if (visibility == 0) { // SystemBar 处于显示状态 } else { // SystemBar 处于隐藏状态 } }
相关文章推荐
- Android 状态栏(StatusBar)和虚拟键(NavigationBar)的高度获取
- Android应用:StatusBar状态栏、NavigationBar虚拟按键栏、ActionBar标题栏、Window屏幕内容区域等的宽高
- Android 状态栏的 颜色 的设置上的一些问题 4.4以上 ,字体颜色优化
- Android 设置系统SystemUI 顶部StatusBar状态栏透明一体化
- Android StatusBar 状态栏颜色设置
- Android 6.0系统源码设置与控制状态栏statusbar的高度
- Android应用:StatusBar状态栏、NavigationBar虚拟按键栏、ActionBar标题栏、Window屏幕内容区域等的宽高
- Android StatusBar 状态栏颜色设置
- Android 状态栏的 颜色 的设置上的一些问题 4.4以上 ,字体颜色优化
- Android应用:StatusBar状态栏、NavigationBar虚拟按键栏、ActionBar标题栏、Window屏幕内容区域等的宽高
- Android获取系统顶部状态栏(StatusBar)与底部工具栏(NavigationBar)的高度
- Android中的一些简单设置
- android中获得屏幕、视图、任务栏、状态栏的高宽以及屏幕的设置
- 关于vmware虚拟主机使用host-only连接并共享主机上网的一些设置
- 在android的状态栏(statusbar)中增加menu,home和back快捷键的方法
- android: 设置中文字体效果的一些方法
- android中listview的一些样式设置
- android中listview的一些样式设置
- 【转】 android webview的 一些设置
- android 学习五 设置应用程序全屏(没有状态栏和标题栏)