Android View.performClick()无效时的解

2023-07-12  本文已影响0人  寻水的鱼Chock

前言

开发过程中,经常需要利用代码去触发View的点击动作,通常也只需要调用View.performClick()就能实现。但是有时候却不管用,通过源码可以发现,这个View只能触发自己所设置的点击事件的回调,对于涉及多个View层级的ViewGoup组合就会不起作用。源码截图如下:

View.performClick源码

如何实现这种情况下的点击动作呢?----可以通过Activity.dispatchTouchEvent()模拟分发触摸事件就能实现!

解决方案

利用代码模拟产生ACTION_DOWN和ACTION_UP触摸事件触发View的点击效果:

activity.let {
    val cl = arrayOf(100f,100f)//点击坐标
    //模拟生成ACTION_DOWN事件
    val upt = SystemClock.uptimeMillis()
    val ev = MotionEvent.obtain(upt, upt, MotionEvent.ACTION_DOWN, cl[0], cl[1], 0)
    it.dispatchTouchEvent(ev)
     //模拟生成ACTION_UP事件
    it.dispatchTouchEvent(MotionEvent.obtain(ev).also { it.action = MotionEvent.ACTION_UP })
}

ps: 获取View的坐标可以使用View.getLocationInWindow()函数或者View.getChildVisibleRect()函数



如果本文对你有帮助就点个赞支持下吧~~~

上一篇 下一篇

猜你喜欢

热点阅读