|
|
我用AI解决了这个问题,首先悬浮窗模块加入这个方法
- <火山程序 类型 = "通常" 版本 = 1 />
- 方法 置输入焦点 <公开 注释 = "动态切换悬浮窗是否允许获得系统输入焦点。允许焦点时输入法可弹出,但会阻塞其他App的IME。" 注释 = "禁止焦点时其他App的输入法和手势正常,但悬浮窗内不弹出输入法。">
- 参数 是否允许焦点 <类型 = 逻辑型 注释 = "真=允许焦点/可弹出输入法, 假=禁止焦点/不阻塞其他App">
- {
- @ if (@<是否允许焦点>) {
- @ // 允许焦点:移除 FLAG_NOT_FOCUSABLE + 添加 FLAG_WATCH_OUTSIDE_TOUCH 以检测窗外触摸
- @ m_savedFlags = params.flags & (WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH);
- @ params.flags &= ~WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
- @ params.flags |= (WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH);
- @ } else {
- @ // 禁止焦点:恢复 FLAG_NOT_FOCUSABLE + 移除 FLAG_WATCH_OUTSIDE_TOUCH
- @ params.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
- @ params.flags &= ~WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;
- @ }
- 更新视图 ()
- }
复制代码
常量里加入
- <火山程序 类型 = "通常" 版本 = 1 />
- 常量 类型_允许窗口外触摸 <公开 类型 = 整数 值 = @android.view.WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
- 注释 = "设置悬浮窗允许接收窗口外部的触摸事件(ACTION_OUTSIDE),用于检测用户触摸悬浮窗外(桌面/其他App)时自动清除编辑框焦点。" 编辑时信息 = "0, BFFF4, 0, 0">
复制代码
然后在悬浮窗口 编辑框_组件焦点被改变 获得焦点后执行 悬浮窗口.置输入焦点 (真)
在悬浮窗口 线性布局器_被触摸 编辑框.释放焦点 () 悬浮窗口.置输入焦点 (假)
最后 悬浮窗口 = 悬浮窗口类.新建 (操作的窗口, 悬浮窗口类.类型_禁止覆盖窗口 + 悬浮窗口类.类型_允许窗口外触摸)
|
|