[英]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);
一旦我这样做,窗口插入更改为似乎没有任何意义的值。 然后,当我退出全屏碎片时,我在视图上出现错误的填充(基于奇怪的插图)
有谁知道这里发生了什么? 我理解窗口插入的方式必定是错误的,因为这种行为似乎完全违反直觉。 任何见解将不胜感激。
要查看我编写的测试应用程序的完整源代码来说明问题,请访问:
setSystemUiVisibility()
传播系统UI可见性更改视图层次结构(以请求新的insets)。
但是,当您在Fragment的onCreateView()
调用layout.setSystemUiVisibility()
时, layout
尚未附加到视图层次结构。 这就是导致你的问题没有得到适当更新的问题。
你可以在onCreateView()
调用getActivity().getWindow().getDecorView().setSystemUiVisibility()
onCreateView()
,你会发现所有的insets都能正常工作。
我今天也有同样的问题。 我正在使用设计库中的NavigationView。 当我退出全屏时,NavigationView的顶部和底部都有昆虫,这很难看。
我调试并深入研究NavigationView的源代码并找到以下解决方案:
对于您的视图,请使用setFitsSystemWindows(false)方法,对于NavigationView,以避免状态栏和导航栏更改的影响。
我发现在NavigationView的超类中存在OnApplyWindowInsetsListener:ScrimInsetsFrameLayout,然后我通过使用ViewCompat.setOnApplyWindowInsetsListener(mNavigationView,null)清除此侦听器以避免在启用/禁用全屏时产生影响。
现在,当退出全屏时,NavigationView的行为正常,希望这有助于解决您的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.