我正在编写一个包含一个活动和一堆片段的应用程序,其中一个片段是全屏的。为了实现这一点,我尝试使用System UI Visibility标志。
对于全屏片段,我设置了可见性:
layout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
一旦我这样做,窗口插入就会变为看起来没有任何意义的值。然后,当我退出那个全屏片段时,我在视图上出现了错误的填充(基于奇怪的插图)
有谁知道这里发生了什么?我理解窗口插入的方式必定是错误的,因为这种行为似乎完全违反直觉。任何见解都将不胜感激。
要查看我编写的测试应用程序的完整源代码,请说明问题:
答案 0 :(得分:0)
setSystemUiVisibility()
传播系统UI可见性更改视图层次结构(以请求新的insets)。
但是,当您在片段layout.setSystemUiVisibility()
中呼叫onCreateView()
时,layout
尚未附加到视图层次结构中。这就是导致您的插件无法正确更新的问题。
您可以在getActivity().getWindow().getDecorView().setSystemUiVisibility()
中拨打onCreateView()
,然后您会发现所有内容都能正常运行。
答案 1 :(得分:0)
我今天遇到同样的问题。我正在使用设计库中的NavigationView。当我退出全屏时,NavigationView的顶部和底部都有昆虫,这很难看。
我调试并深入研究NavigationView的源代码并找到以下解决方案:
对于您的视图,请使用setFitsSystemWindows(false)方法,对于NavigationView,以避免影响状态栏和导航栏更改。
我发现在NavigationView的超类中存在OnApplyWindowInsetsListener:ScrimInsetsFrameLayout,然后我通过使用ViewCompat.setOnApplyWindowInsetsListener(mNavigationView,null)清除此侦听器以避免在启用/禁用全屏时产生影响。
< / LI> 醇>现在,当退出全屏时,NavigationView的行为正确,希望这有助于解决您的问题。