繁体   English   中英

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

[英]Android : Fullscreen system visibility screws up window insets

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

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

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

一旦我这样做,窗口插入更改为似乎没有任何意义的值。 然后,当我退出全屏碎片时,我在视图上出现错误的填充(基于奇怪的插图)

在此输入图像描述

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

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

https://github.com/dapp/visibilitytest

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

但是,当您在Fragment的onCreateView()调用layout.setSystemUiVisibility()时, layout尚未附加到视图层次结构。 这就是导致你的问题没有得到适当更新的问题。

你可以在onCreateView()调用getActivity().getWindow().getDecorView().setSystemUiVisibility() onCreateView() ,你会发现所有的insets都能正常工作。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM