沉浸式中显示 PopupWindow

在全屏沉浸模式时(Immersive Full-Screen Mode),如果弹出 Dialog 或 PopupWindow,则会自动退出沉浸模式。

退出沉浸式的原因是因为 Activity 的 Window 焦点被抢走了,Window 中的 DecorView 状态改变导致了退出。

如果要继续保持沉浸模式。对于 Dialog 情况,这里有解决办法 。 Dialog 在初始化时会生成新的 Window,先禁止 Dialog Window 获取焦点,等 Dialog 显示后对 Dialog Window 的 DecorView 设置 setSystemUiVisibility ,接着再获取焦点。 这样表面上看起来就没有退出沉浸模式。

而 PopupWindow 并没有创建新的 Window,只是将 PopupWindow 的 View 添加到当前的 WindowManager。不过可以对 PopupWindow 设置 setFocusable

同理,先在失焦的状态,弹出 PopupWindow , 再对 PopupWindow 的 DecorView 设置 setSystemUiVisibility ,最后获取焦点即可。 虽然 PopupWindow 对外没有暴露出 DecorView ,但只要是 PopupWindow 中的可见 View 都行。

代码如下:

PS: 又续费了一年的空间,得经常更新点东西才不浪费啊。

Author

Relex

Android Developer