安卓。如何在具有显示切割的设备上正确地以程序方式隐藏状态栏

4

我在我的应用程序中使用了一个viewPager和两个碎片。当你滑动到其中一个时,我想隐藏状态栏。以下是代码:

val hideFlag: Int =
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
            View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
            View.SYSTEM_UI_FLAG_FULLSCREEN or
            View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY

activity?.window?.decorView?.systemUiVisibility = hideFlag

在普通设备上一切运行得非常好,但是在有显示切口的设备上存在一些问题。

1)当状态栏显示或隐藏时,整个界面会重新布局和跳动。

2)如果状态栏被隐藏并且您从屏幕顶部向下滑动,您的应用程序将崩溃而没有任何关于错误的日志或对话框。

有什么想法吗?谢谢

1个回答

0

我已经成功解决了问题#2。这是来自Activity.onTouchEvent的代码:

public boolean onTouchEvent(MotionEvent event) {
    if (mWindow.shouldCloseOnTouch(this, event)) {
        finish();
        return true;
    }

    return false;
}

所以窗口决定结束当前活动。我不知道为什么这段代码存在,但我在我的基本活动中覆盖了这个方法,因此它总是返回false,一切似乎都很好。

不过,问题#1仍然存在问题。


你找到解决方案了吗?我也遇到了同样的问题。谢谢。 - Carlos
没有理由在有切口的设备上隐藏状态栏,因为这个空间将会被浪费。不要隐藏状态栏或使用LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES标志来利用所有可用空间。 - Kuva

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接