Android 覆盖操作栏被状态栏遮挡

Android 覆盖操作栏被状态栏遮挡,android,android-actionbar,overlay,statusbar,Android,Android Actionbar,Overlay,Statusbar,我试图让我的应用程序在真正的全屏(没有状态栏,没有动作栏)和“正常模式”(动作栏和状态栏)之间切换。为此,我在覆盖模式下设置了一个操作栏,并允许用户切换操作栏和状态栏: getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); actionBar.show()

我试图让我的应用程序在真正的全屏(没有状态栏,没有动作栏)和“正常模式”(动作栏和状态栏)之间切换。为此,我在覆盖模式下设置了一个操作栏,并允许用户切换操作栏和状态栏:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);     
actionBar.show();
…和关闭:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
actionBar.hide();
这可以正常工作,但只有一个例外:无论何时发生这些操作,都会调整实际布局的大小。显然,还有另一个标志要说明这一点,因此我将其添加到我的
onCreate()

好的,现在调整大小不再是一个问题,但是现在只要状态栏同时打开,我的操作栏就会被状态栏遮住一半:


有什么我遗漏的吗?如何使操作栏正确显示在状态栏的正下方?

经过反复试验,我找到了解决方案。这会隐藏动作栏和状态栏,而不会导致图像调整大小

private void toggleFullscreen(boolean on) {
    ActionBar actionBar = getActionBar();
    View decorView = getWindow().getDecorView();

    if (on) {
        decorView.setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | View.SYSTEM_UI_FLAG_FULLSCREEN);
        actionBar.hide();
    }
    else {
        decorView.setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
        actionBar.show();
    }

}

既然你可以直接显示和隐藏,为什么还要使用flag呢。我尝试过使用
decorView.setSystemMiviability(View.SYSTEM\u UI\u FLAG\u FULLSCREEN)
,但它似乎与上述方法没有任何区别。影响调整大小的唯一标志是
flag\u LAYOUT\u NO\u LIMITS
,它会导致动作栏被剪裁。
private void toggleFullscreen(boolean on) {
    ActionBar actionBar = getActionBar();
    View decorView = getWindow().getDecorView();

    if (on) {
        decorView.setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | View.SYSTEM_UI_FLAG_FULLSCREEN);
        actionBar.hide();
    }
    else {
        decorView.setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
        actionBar.show();
    }

}