当 Android 自动退出 Immersive Sticky 时,它不会调整视图大小,因此它们会被阻止

When Android automatically exits Immersive Sticky it does not resize views so they are blocked

我有一个 activity,它可以通过单击按钮进入沉浸式粘性全屏。此按钮执行以下代码以进入沉浸式粘性全屏。

getActivity().getWindow().getDecorView().setSystemUiVisibility(
      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_STICKY);

注意:我特别不包含以下标签,就像我这样做一样,当我退出沉浸式粘性全屏时,它会破坏我的屏幕布局。请参阅我的其他问题:

View.SYSTEM_UI_FLAG_LAYOUT_STABLE

当 Android 处于沉浸式粘性全屏时,当显示另一个视图(例如 DialogFragment、AlertDialog、键盘出现时)时,Android 会自动将您带出沉浸式粘性全屏显示状态栏和屏幕导航栏。但是它不会调整我的应用程序中视图的大小,所以现在我的视图位于导航栏下方,我无法访问屏幕底部的任何按钮。我已经使用 "View.SYSTEM_UI_FLAG_LAYOUT_STABLE" 标志进行了测试,它没有任何区别,视图仍然没有调整大小。

这似乎是 Android 行为中的一个巨大缺陷,我肯定做错了什么。当它显示状态栏和导航栏时,如何让它调整我的视图大小?

我可以解决某些情况,例如使用以下 SO 问题中的代码弹出对话框, 但是我有很多可能会在我的全屏视图中弹出的东西,但我没有不想把那个 hack 放在每个地方,以保持身临其境的全屏。此外,当键盘出现时,我确实希望导航栏出现。

当然Android在显示屏幕栏时应该调整屏幕视图。

重新阅读 Google 文档,很明显原因是包含了以下两个标志

View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN      // this STOPS Android resizing my view to be below the status bar when it is displayed
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION // this STOPS Android resizing my view to be above the nav bar when it is displayed

https://developer.android.com/training/system-ui/immersive.html "It's good practice to include other system UI flags (such as SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION and SYSTEM_UI_FLAG_LAYOUT_STABLE) to keep the content from resizing when the system bars hide and show. You should also make sure that the action bar and other UI controls are hidden at the same time. "