【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
        }
    }
相关推荐
橘子海全栈攻城狮2 小时前
【源码+文档+调试讲解】基于Android的固定资产借用管理平台
android·java·spring boot·后端·python·美食
服装学院的IT男2 小时前
【Android 源码分析】Activity生命周期之onStop-2
android
qluka3 小时前
Android 安装过程五 MSG_INSTALL消息的处理 安装
android
林多4 小时前
【Android】CarWatchDog I/O监控服务
android·watchdog·监控·car·disablepackage
机器之心4 小时前
这篇论文非常火!差分Transformer竟能消除注意力噪声,犹如降噪耳机
android·人工智能
golitter.4 小时前
MySql表结构设计 - 数据操作语言
android·数据库·mysql
GEEKVIP5 小时前
如何从数码相机中恢复已删除的照片
android·数码相机·macos·ios·电脑·手机·iphone
千里马学框架6 小时前
安卓如何实现双击触摸唤醒点亮屏幕功能-Android framework实战开发
android·车载系统·wms·安卓framework开发·安卓窗口系统·双击屏幕·唤醒
修行者对6668 小时前
Android Studio实现安卓心理健康咨询
android·ide·android studio
lizi888888 小时前
MYSQL-INNODB索引构成详解
android·数据库·mysql