Android 13中TYPE_APPLICATION_OVERLAY无法接收输入问题求助
Android 13悬浮层无法接收输入的解决方案
你的悬浮层在Android 13上无响应的核心原因是代码中使用了WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE标记——这个标记会让窗口失去输入焦点,无法接收触摸、点击等事件。Android 13对窗口焦点的处理逻辑比旧版本更严格,导致相同代码在≤12版本能正常工作,但13版本中该标记会完全阻断输入事件传递。
修复代码
移除FLAG_NOT_FOCUSABLE,添加FLAG_FOCUSABLE和FLAG_NOT_TOUCH_MODAL来保证窗口能获取焦点同时不屏蔽下层交互:
View test = LayoutInflater.from(context).inflate(R.layout.test, null, false); WindowManager.LayoutParams params = new WindowManager.LayoutParams( WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY, WindowManager.LayoutParams.FLAG_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, PixelFormat.OPAQUE); windowManager.addView(test, params);
关键标记说明
FLAG_FOCUSABLE:允许悬浮层窗口获取输入焦点,这样控件才能响应交互事件。FLAG_NOT_TOUCH_MODAL:确保点击悬浮层以外的区域时,事件能正常传递给下层应用,避免影响其他窗口的使用。
额外检查点
如果修复后仍有问题,可排查:
- 悬浮层布局内的控件是否被设置了
android:focusable="false"或android:clickable="false"属性。 - 是否存在其他窗口标记(如
FLAG_NOT_TOUCHABLE)意外阻断了事件传递。
内容的提问来源于stack exchange,提问作者saurabh verma
相关产品推荐
相关产品推荐

