如何避免WindowManager悬浮窗导致全屏应用无法隐藏系统导航栏
解决方案
要解决全屏应用中导航栏无法隐藏的问题,你需要调整悬浮窗的WindowManager.LayoutParams参数,添加以下关键Flag:
- 添加
FLAG_LAYOUT_IN_SCREEN和FLAG_LAYOUT_NO_LIMITS,让悬浮窗适配屏幕整体区域,避免阻止系统导航栏的隐藏逻辑。 - 可选添加
FLAG_NOT_FOCUSABLE,确保悬浮窗不获取焦点,进一步减少对全屏应用UI状态的干扰。
修改后的完整代码如下:
mWindowManager = getSystemService(WINDOW_SERVICE) as WindowManager val params = WindowManager.LayoutParams( WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL or WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN or WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS or WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT ) mWindowManager!!.addView(buttonView, params)
各Flag作用说明
FLAG_LAYOUT_IN_SCREEN:让悬浮窗布局占据整个屏幕空间,忽略系统UI的占位区域,系统隐藏导航栏时不会受悬浮窗布局范围限制。FLAG_LAYOUT_NO_LIMITS:允许悬浮窗超出屏幕边界,避免强制系统保留导航栏区域来适配悬浮窗。FLAG_NOT_FOCUSABLE:确保悬浮窗不获取输入焦点,避免干扰全屏应用的焦点状态,提升兼容性。
内容的提问来源于stack exchange,提问作者Alan Chan
相关产品推荐
相关产品推荐

