2

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

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

注意:我特别不包含以下标签,就像我这样做一样,当我退出沉浸式粘性全屏时,它会破坏我的屏幕布局。看我的另一个问题:Android close full screen view at the bottom is shuted off the screen

View.SYSTEM_UI_FLAG_LAYOUT_STABLE

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

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

我可以解决某些情况,例如使用以下 SO 问题中的代码弹出对话框,https://stackoverflow.com/a/24549869/2663916但我有很多可能的事情可以在我的全屏视图上弹出而且我不想在每个地方都放置这个hack来保持沉浸式全屏。此外,当键盘出现时,我确实希望出现导航栏。

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

4

1 回答 1

2

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

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 “最好包含其他系统 UI 标志(例如 SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 和 SYSTEM_UI_FLAG_LAYOUT_STABLE),以防止在系统栏隐藏和显示时调整内容的大小。您还应该确保同时隐藏操作栏和其他 UI 控件。”

于 2018-02-01T19:16:09.907 回答