【问题标题】:Overlay Action Bar obscured by status bar被状态栏遮挡的覆盖操作栏
【发布时间】:2014-06-21 06:51:58
【问题描述】:

我正在尝试让我的应用在真正的全屏(无状态栏、无操作栏)和“正常模式”(操作栏和状态栏)之间切换。为此,我在覆盖模式下设置了一个操作栏,并允许用户同时打开操作栏和状态栏:

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()

getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);

好的,现在调整大小不再是问题,但是现在我的操作栏被状态栏遮住了一半,只要两者都打开:

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

【问题讨论】:

  • 既然可以显示和隐藏,为什么还要使用标志
  • 似乎不起作用。我尝试过使用decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN),但它似乎与上述方法没有任何区别。影响调整大小的唯一标志是FLAG_LAYOUT_NO_LIMITS,它会导致操作栏被剪裁。

标签: android android-actionbar overlay statusbar


【解决方案1】:

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

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();
    }

}

【讨论】:

    猜你喜欢
    • 2016-12-21
    • 1970-01-01
    • 2021-04-05
    • 2015-11-29
    • 2011-12-17
    • 1970-01-01
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多