5

我正在尝试在我的 Android 应用程序中实现沉浸式(全屏)模式,但遇到了一个我无法解决的问题。

我正在遵循Android Docs 中的沉浸式模式指南和示例应用程序,它大部分都可以工作,但是当退出沉浸式模式时,我的应用程序上的应用栏(操作栏)仍处于覆盖模式(它不会以覆盖模式启动当活动启动时),从而模糊了我的活动的一些内容,并且我无法弄清楚setSystemUiVisibility()在退出沉浸式模式时我需要提供哪些 UI 标志和按位运算符的组合以使其将我的应用程序恢复到初始状态(使用未处于叠加模式的应用栏)。

我有一个显示问题的演示应用程序,相关代码位如下:

使用内置工具栏/应用程序栏/操作栏进行样式设置,尽管我尝试使用自己的自定义工具栏并将其设置为支持操作栏,但结果相同。

<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;

}

进入沉浸式模式时,我并没有尝试禁用应用栏进入覆盖模式(我想要该功能),但我不知道如何让它在退出沉浸式模式时关闭覆盖模式。任何帮助,将不胜感激。

以下是演示应用程序的一些屏幕截图:

初次启动时

初次发射

进入全屏模式后

全屏模式

退出全屏模式后

退出全屏后

4

0 回答 0