背景
在使用某APP的過程中發現,該APP對PopupWindow的沉浸式支援并不好,在使用PopupWindow的時候,狀态欄會變成純白色,看不到時間信号等等。如下圖所示
APP彈出菜單時候狀态欄底色純白
而正常的狀态欄應該如下圖所示
正常情況下狀态欄顯示
問題追蹤
看到這個之後覺得頂部看不到時間、信号神馬的非常不舒服,于是上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的效果