【Android】修复部分系统拖拽窗口导致弹窗消失的问题

问题

PopupWindow内部对外部事件进行了过滤,如果触发外部事件,会自动关闭弹窗

有些处理得不够好的系统,拖拽边缘时会被误认为是Outside事件来处理,这样就导致了弹窗关闭

方法

对TouchEvent进行拦截,过滤混淆事件

代码
kotlin 复制代码
    override fun setContentView(view: View) {
        super.setContentView(view)
        interceptOutsideEvent()
    }

    @SuppressLint("ClickableViewAccessibility")
    private fun interceptOutsideEvent() {
        setTouchInterceptor { v, e ->
            val decorView = contentView.rootView
            if ((e.action == MotionEvent.ACTION_DOWN)) {
                val outside = e.x < 0 || e.x >= decorView.measuredWidth || e.y < 0 || e.y >= decorView.measuredHeight
                if (outside) {
                    ToastUtils.show("outside")
                    return@setTouchInterceptor true
                }
            } else if (e.action == MotionEvent.ACTION_OUTSIDE) {
                ToastUtils.show("outside")
                return@setTouchInterceptor true
            }
            return@setTouchInterceptor false
        }
    }
相关推荐
モンキー・D・小菜鸡儿22 分钟前
Android14 新特性与适配指南
android·kotlin·安卓新特性
技术摆渡人1 小时前
Android系统技术探索(1)启动流程
android
介一安全3 小时前
【Frida Android】实战篇12:企业常用对称加密场景 Hook 教程
android·网络安全·逆向·安全性测试·frida
モンキー・D・小菜鸡儿3 小时前
Android15 新特性与适配指南
android·kotlin·安卓新特性
星环处相逢4 小时前
MySQL数据库索引与事务:从基础到实践的全面解析
android
Kin__Zhang4 小时前
随手记录 UE4/CARLA 仿真器 segmentation fault
android·java·ue4
明君879974 小时前
Flutter横向树形选择器实现方案
android·ios
CrazyQ14 小时前
flutter_easy_refresh在3.38.3配合NestedScrollView的注意要点。
android·flutter·dart
三七吃山漆5 小时前
攻防世界——fakebook
android·网络安全·web·ctf
二川bro6 小时前
类型错误详解:Python TypeError排查手册
android·java·python