Nexus5 实现全屏显示(屏幕状态监听)(code)
来源:互联网 发布:单片机波特率宏定义 编辑:程序博客网 时间:2024/06/15 16:27
最近开发的时候发现,nexus5在全屏显示方面有一个不好处理的地方
nexus5没有实体按键,所以在屏幕显示区域 有一个 NavigationBar 存在,也就是Android机型最经典的三个按键。
如果要实现Activity的全屏显示,有以下几个方案。
方案一
在Androidmanifast文件中 对activity的属性进行修改
android:theme="@android:style/Theme.NoTitleBar.Fullscreen
也可以在代码中实现
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
效果如图
虽然实现了全屏,系统状态栏消失了,但是NavigationBar依然存在,并且占据的显示内容的一部分。
方案二
在activity的onCreate方法中 添加如下代码
View mDecorView = getWindow().getDecorView(); mDecorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_IMMERSIVE);
效果如图
看上去似乎已经达到了效果,但是在触摸屏幕顶部区域,会触发系统的通知栏,这个时候NavigationBar就会显示出来,并且一直显示。
所以这种方法也是不完美的。
On Android 4.1 and higher, you can set your application's content to appear behind the status bar, so that the content doesn't resize as the status bar hides and shows. To do this, help your app maintain a stable layout.
根据官方描述,SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
这个属性可以让NavigationBar显示在内容上方,而不会因为NavigationBar的显示于隐藏,resize 内容区域。SYSTEM_UI_FLAG_LAYOUT_STABLE
这个属性是让效果持续的。
方案三
同样是在activity中的oncreate方法中添加如下代码
getWindow().getDecorView() .setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
这种方法的效果是可以隐藏NavigationBar,但是一旦用户与屏幕发生交互动作,比如点击屏幕。 NavigationBar就会显示出来。
问题
综上所述,发现最终的问题是,当用户与界面发生交互,会退出全屏模式。(官方给出的解释是,一旦用户触碰屏幕,之前设置的flag会被清空)
With this approach, touching anywhere on the screen causes the navigation bar (and status bar) to reappear and remain visible. The user interaction causes the flags to be be cleared.
解决方案
Responding to UI Visibility Changes
监听状态栏,和导航栏的 显示,和隐藏变化。
通过View.OnSystemUiVisibilityChangeListener
这个监听器实现监听。
在你的Activity中的onCreate方法中 添加如下代码。
View decorView = getWindow().getDecorView();decorView.setOnSystemUiVisibilityChangeListener (new View.OnSystemUiVisibilityChangeListener() { @Override public void onSystemUiVisibilityChange(int visibility) { // Note that system bars will only be "visible" if none of the // LOW_PROFILE, HIDE_NAVIGATION, or FULLSCREEN flags are set. if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) { // TODO: The system bars are visible. Make any desired //现在系统状态栏,导航栏处于显示状态。 // adjustments to your UI, such as showing the action bar or // other navigational controls. //在这里重新设置 Decorview的状态为全屏状态,这样就可以在用户点击屏幕退出全屏之后,再次进入全屏。 } else { // TODO: The system bars are NOT visible. Make any desired //系统状态栏,导航栏处于 消失 状态 // adjustments to your UI, such as hiding the action bar or // other navigational controls. } }});
reference link 1
reference link 2
reference link 3
- Nexus5 实现全屏显示(屏幕状态监听)(code)
- C++实现屏幕截图(全屏截图)
- 屏幕状态的监听
- 监听屏幕状态
- 怎样实现全屏显示(vc)
- Android双击屏幕动态实现全屏(隐藏标题栏状态栏)
- Android 几种常用关于屏幕操作的方法(获取屏幕大小,全屏,显示方向)
- Android初学习 - 在Activity中监听屏幕属性改变用来控制是否全屏(隐去status bar)
- 监听屏幕解锁和判断屏幕状态
- Android的ScrollView的滚动的监听以及屏幕静止状态的监听实现
- 使用Matrix进行图形变换来完成图片在屏幕上的全屏显示(屏幕自适应)
- Android中监听软键盘显示状态实现代码
- VC实现全屏显示
- Android--实现全屏显示
- MFC实现全屏显示
- Android实现全屏显示
- Android 实现全屏显示
- Android实现全屏显示
- FileOutputStream写到文件
- Zookeeper学习1_分布式服务框架 Zookeeper -- 管理分布式环境中的数据
- Jenkins系列之—10 配置Linux系统ssh免密码登陆
- opencv haar+adaboost使用心得
- hdu 1203 I NEED A OFFER!
- Nexus5 实现全屏显示(屏幕状态监听)(code)
- Ajax中的get和post两种请求方式的异同
- 新的触摸体验——iOS9的3D Touch
- Jenkins系列之—11 Publish Over SSH插件
- Fourier Series Intro - Fourier Series
- LCD驱动中pixclock的计算
- iOS 9:快速让你的APP支持spotlight搜索
- Android Uevent 分析,从kernel到framework
- Jenkins系列之—12 修改Jenkins用户的密码