Android View.performClick()无效时的解决方案

前言

开发过程中,经常需要利用代码去触发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()函数



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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容