天天看點

Android沉浸式狀态欄與Dialog/PopupWindow相容

背景

在使用某APP的過程中發現,該APP對PopupWindow的沉浸式支援并不好,在使用PopupWindow的時候,狀态欄會變成純白色,看不到時間信号等等。如下圖所示

Android沉浸式狀态欄與Dialog/PopupWindow相容

APP彈出菜單時候狀态欄底色純白

而正常的狀态欄應該如下圖所示

Android沉浸式狀态欄與Dialog/PopupWindow相容

正常情況下狀态欄顯示

問題追蹤

看到這個之後覺得頂部看不到時間、信号神馬的非常不舒服,于是上Google查了一下原因。後來終于在StackOverFlow上找到一些資訊:

http://stackoverflow.com/questions/22794049/how-to-maintain-the-immersive-mode-in-dialogs/23207365#23207365

其中的有一句話:

Set the dialog to not focusable (makes navigation ignore us adding the window)

設定Dialog沒有焦點,使得狀态欄忽略新添加的Window

這樣就能可以實作狀态欄在PopupWindow/Dialog彈出的時候,也可以正常顯示了,在自己做的Demo中也證明了這一點

解決辦法

在PopupWindow/Dialog展示(show)之前,調用setFocusable(false),這樣在彈出PopupWindow的時候沒有焦點,就不會影響沉浸式狀态欄的顯示了。

遺留問題

因為Android底部有虛拟按鍵,上網查資料發現都說需要設定Popup的WindowInputMethod,但是發現和預期不一樣,會導緻虛拟按鍵的位置有問題,是以,暫時沒有解決方案,最後還是通過View樹動态的addView和removeView來實作PopupWindow的效果