概述
在做项目功能的时候,做到有关页面全屏的处理时,发现状态栏的下拉会遮住全屏页面一小部分视图,这样的话可能会影响遮住的那部分的功能的实现。那怎么办呢?现在我们就来处理一下这个问题。
实例
废话不多说,直接来讲吧。首先我们在manifest中设置Activity的主题为 android:theme=”@android:style/Theme.NoTitleBar”>,在Activity中setContentView之前设置 getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE),这样是设置状态栏一直可见,就是说顶部留有位置给状态栏。我们来看看一看其它的flag
现在我们来逐一说一说这些flag的作用
1. View.SYSTEM_UI_FLAG_VISIBLE:显示状态栏
2. View.SYSTEM_UI_FLAG_FULLSCREEN:Activity全屏显示,且状态栏被隐藏覆盖掉,下拉状态栏的时候,会覆盖顶部布局。
3. View.SYSTEM_UI_FLAG_HIDE_NAVIGATION:隐藏虚拟按键(导航栏),这个不会隐藏状态栏。有些手机会用虚拟按键来代替物理按键。
4. View.SYSTEM_UI_FLAG_IMMERSIVE:沉浸式设计,需结合其它的flag来使用。
5. View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY:粘性沉浸式设计,需结合其它的flag来使用。
6. View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN:Activity全屏显示,但状态栏不会被隐藏覆盖,状态栏依然可见,Activity顶端布局部分会被状态遮住。
7. View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION:效果同View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN。
8. View.SYSTEM_UI_FLAG_LAYOUT_STABLE:不管状态栏隐藏与否,状态栏的位置都会保留。
9. View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR:效果同View.SYSTEM_UI_FLAG_VISIBLE。但是状态栏上的图标会被隐藏。
10. View.SYSTEM_UI_FLAG_LOW_PROFILE:状态栏显示处于低能显示状态(low profile模式),状态栏上一些图标显示会被隐藏。
如果你在manifest中设置Activity的theme为Fullscreen,你会发现你在代码中设置各种flag都不会生效。还有一个就是要注意不同的flag适用的版本,你还可以多个flag一起用来满足你的需求。
总结
现在我在开发过程中遇到,当在弹出Dialog或者消失的时候,虚拟按键会弹出来,不能达到手动去弹出虚拟按键的时候才弹出,就算自己在做一遍处理,虚拟按键会先弹出在消失,用户体验不好。我看了一下游戏的界面,他们可以做到切换场景的时候,虚拟按键不会弹出。现在正在寻求解决方法,希望知道的童鞋给我留言,多谢。