android - 覆盖操作栏被状态栏遮挡

标签 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_FULLSCREEN);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
actionBar.hide();

这工作正常,只有一个异常(exception):只要发生这些操作中的任何一个,实际布局就会调整大小。好吧,显然还有另一个标志可以说明这一点,所以我添加到我的 onCreate() 中:

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

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

obscured action bar

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

最佳答案

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

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

}

关于android - 覆盖操作栏被状态栏遮挡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24339163/

相关文章:

android-layout - "?actionbarsize","?attr:actionbarsize"和 "?android:actionBarSize"有什么区别?

android - 有什么方法可以获取用于在 android 中进行 Junit 测试的 Actionbar 项目的引用?

javascript - 谷歌地图信息窗口closeclick事件(函数参数)

ios - 将动画叠加图像添加到视频

jquery - 如何在 jQuery 中创建一个将在内容底部结束或在内容不适合时显示滚动条的灯箱窗口?

android - react-native修改index.android.js没有变化

java - 相机 2 基本 : Application:transformClassesWithDexForDebug

android - 在两个 fragment 之间传递一个参数,每个 fragment 都在不同的导航图中

android - 在 Android 和 Web API .NET 之间发送加密字符串

android - 操作栏中的 ShareActionProvider 图标