首页 文章

Android - 导航栏与景观叠加

提问于
浏览
1

在我的应用程序中,我试图使导航栏覆盖活动的内容 . 在纵向模式下,它工作正常 . 导航栏覆盖内容 . 当我将方向更改为横向时,屏幕右侧会有导航栏 . 在此横向模式下,导航栏不会覆盖我的内容 . 我已经实现了打开和关闭全屏模式的功能 . 当我在横向模式下打开全屏时,由于未覆盖导航栏,我的活动内容跳转到左侧 . 以前,我的目标是sdk版本18,它运行良好 . 现在我的目标是sdk版本22,我遇到了这个问题 .

在我的 onCreate 中,我有以下几行:

if (Build.VERSION.SDK_INT > 17) {
    window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_OVERSCAN);
} else {
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
}

启用全屏模式的方法如下:

protected void fullscreenOn() {
    if (mActivity != null && !mSearchModeOn) {
        Window window = mActivity.getWindow();
        View decorView = window.getDecorView();
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
            decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View
                    .SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | View
                    .SYSTEM_UI_FLAG_IMMERSIVE);
        } else {
            window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
            window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
            mActionBar.hide();
        }
        mActionBar.hide();

        bottomBarsLayout.setVisibility(View.GONE);
        mIsFullscreenOn = true;

    }
}

奇怪的是,在肖像中它工作正常,但在景观中没有 . 有谁能够帮我?

UPDATE

Note: 在我的布局中,我将 fitsSystemWindow 属性设置为 true .

UPDATE 2

我对肖像和风景使用相同的布局 . 此外,我注意到这种奇怪的行为仅适用于安装了Android 5(API 21)及更高版本的设备 . 我用KitKat在设备上测试它,它工作正常 .

1 回答

  • 1

    我终于解决了这个问题 . 我在我的活动风格中添加了以下一行 .

    <item name="android:windowDrawsSystemBarBackgrounds" tools:ignore="NewApi">false</item>
    

相关问题