问题
激活和取消激活(immersive) full-screen mode会使状态栏和导航栏“淡入”和淡出。动画在不同设备上似乎有所不同,我想完全禁用动画。我的最低目标SDK是19;但是,我也对需要更高API级的解决方案感到满意。有关更多详细信息,请参见下面。
正在运行的演示
我实施了一个(最少的)演示,以便人们可以轻松地进行测试。一切都可以在GitHub上获得:
为澄清起见,我使用setSystemUiVisibility(FLAGS)
激活/停用全屏模式。此外,我正在使用以下标志:
激活全屏模式:
int visibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
mainView.setSystemUiVisibility(visibility);
停用全屏模式:
int visibility = View.SYSTEM_UI_FLAG_VISIBLE;
mainView.setSystemUiVisibility(visibility);
我尝试过的事情
我已经尝试了许多不同的事情,并做了很多研究。下面,我想总结一下我已经尝试过的主要方法。
许多人建议使用“ getWindow()。setFlags”来更改标志,而不是使用“ setSystemUiVisibility”(似乎建议这样做)。但是,以不同的方式设置标志似乎没有效果。我还认为这已经过时了。
在活动之间进行切换时,似乎可以从退出/进入淡入淡出过渡中排除状态栏和导航栏。但是,这似乎对激活/停用全屏模式没有任何影响。
有些人只是建议使用不同的标志(通常是为了隐藏条形图),但是动画保持不变。
View.setSystemUiVisibility(View.STATUS_BAR_HIDDEN);
有人强调说,可以使用“ overridePendingTransition(0,0)”覆盖后续动画 但这在这种情况下似乎不太可行。
动画的外观
只是为了澄清我的意思。以下是显示状态/导航栏动画的gif动画(对不起,我没有嵌入图像的权限)
Android 8.0 /华为/没有淡出动画(两个条都根据需要消失,但是动画中有淡入淡出)。状态栏和导航栏都“闪烁”。
Android 5.0 /三星/具有淡入和淡出动画(没有导航栏)。
(动作栏的行为符合预期。)