在Android中激活/停用全屏模式时如何禁用状态栏和导航栏动画

时间:2018-12-07 21:37:17

标签: android animation statusbar navigationbar

问题

激活和取消激活(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);

我尝试过的事情

我已经尝试了许多不同的事情,并做了很多研究。下面,我想总结一下我已经尝试过的主要方法。

  1. 许多人建议使用“ getWindow()。setFlags”来更改标志,而不是使用“ setSystemUiVisibility”(似乎建议这样做)。但是,以不同的方式设置标志似乎没有效果。我还认为这已经过时了。

  2. 在活动之间进行切换时,似乎可以从退出/进入淡入淡出过渡中排除状态栏和导航栏。但是,这似乎对激活/停用全屏模式没有任何影响。

  3. 有些人只是建议使用不同的标志(通常是为了隐藏条形图),但是动画保持不变。

    View.setSystemUiVisibility(View.STATUS_BAR_HIDDEN);

  4. 有人强调说,可以使用“ overridePendingTransition(0,0)”覆盖后续动画 但这在这种情况下似乎不太可行。

动画的外观

只是为了澄清我的意思。以下是显示状态/导航栏动画的gif动画(对不起,我没有嵌入图像的权限)

Android 8.0 /华为/没有淡出动画(两个条都根据需要消失,但是动画中有淡入淡出)。状态栏和导航栏都“闪烁”。

Android 5.0 /三星/具有淡入和淡出动画(没有导航栏)。

(动作栏的行为符合预期。)

0 个答案:

没有答案