簡體   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