Android:全屏系统可见性螺旋窗口插入

时间:2015-12-24 00:01:18

标签: android user-interface android-fragments

我正在编写一个包含一个活动和一堆片段的应用程序,其中一个片段是全屏的。为了实现这一点,我尝试使用System UI Visibility标志。

对于全屏片段,我设置了可见性:

layout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);

一旦我这样做,窗口插入就会变为看起来没有任何意义的值。然后,当我退出那个全屏片段时,我在视图上出现了错误的填充(基于奇怪的插图)

enter image description here

有谁知道这里发生了什么?我理解窗口插入的方式必定是错误的,因为这种行为似乎完全违反直觉。任何见解都将不胜感激。

要查看我编写的测试应用程序的完整源代码,请说明问题:

https://github.com/dapp/visibilitytest

2 个答案:

答案 0 :(得分:0)

setSystemUiVisibility()传播系统UI可见性更改视图层次结构(以请求新的insets)。

但是,当您在片段layout.setSystemUiVisibility()中呼叫onCreateView()时,layout尚未附加到视图层次结构中。这就是导致您的插件无法正确更新的问题。

您可以在getActivity().getWindow().getDecorView().setSystemUiVisibility()中拨打onCreateView(),然后您会发现所有内容都能正常运行。

答案 1 :(得分:0)

我今天遇到同样的问题。我正在使用设计库中的NavigationView。当我退出全屏时,NavigationView的顶部和底部都有昆虫,这很难看。

我调试并深入研究NavigationView的源代码并找到以下解决方案:

  1. 对于您的视图,请使用setFitsSystemWindows(false)方法,对于NavigationView,以避免影响状态栏和导航栏更改。

  2. 我发现在NavigationView的超类中存在OnApplyWindowInsetsListener:ScrimInsetsFrameLayout,然后我通过使用ViewCompat.setOnApplyWindowInsetsListener(mNavigationView,null)清除此侦听器以避免在启用/禁用全屏时产生影响。

    < / LI>

    现在,当退出全屏时,NavigationView的行为正确,希望这有助于解决您的问题。