我正在尝试在我的Android应用程序中实现沉浸式(全屏)模式,而且我遇到了一个我无法解决的问题。
我正在关注the Immersive Mode guide and sample apps from the Android Docs,它主要起作用,但是当退出沉浸式模式时,我的应用上的应用栏(操作栏)仍然处于叠加模式(当活动时它不会以叠加模式启动启动),从而模糊了我的活动的一些内容,我无法弄清楚当我退出沉浸式模式时,我需要向setSystemUiVisibility()
提供的UI标志和按位运算符的组合,以使其将我的应用程序放回其中初始状态(应用栏未处于叠加模式)。
我有demo application that shows the problem,相关代码位如下:
使用内置的工具栏/应用栏/操作栏设置样式,但我尝试使用自己的自定义工具栏并将其设置为支持操作栏,结果相同。
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
单击活动中的“切换沉浸式模式”按钮将运行以下方法,该方法遵循Android指南(请参阅上面的链接)以了解沉浸式模式。
private void toggleImmersiveMode() {
View decorView = getWindow().getDecorView();
if (mIsImmersiveEnabled) {
// Immersive Mode is on, turn it off.
decorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
} else {
// Immersive Mode is off, turn it on.
decorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_IMMERSIVE
// Set the content to appear under the system bars so that the
// content doesn't resize when the system bars hide and show.
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
// Hide the nav bar and status bar
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN);
}
mIsImmersiveEnabled = !mIsImmersiveEnabled;
}
当我进入沉浸式模式(我想要那个功能)时,我不是试图禁止应用栏进入叠加模式,但是当退出沉浸式模式时我无法弄清楚如何让它重新关闭叠加模式。任何帮助,将不胜感激。
以下是演示应用的一些截图:
初次发布时
进入全屏模式后
退出全屏模式后