找出哪个 View 消耗了触摸事件,如果有的话

Find out which View consumed touch event, if any

我正在对一个与视图相关的问题进行故障排除:点击侦听器未按预期触发。经过长时间的反复试验,我发现父视图被禁用,因此将所有事件丢弃给它的子视图。

在 Android 中,有没有一种方法可以准确找到触摸或点击事件注入应用程序时发生的情况?比如它是如何发送的,它遍历了哪些视图,谁忽略了它(以及为什么),谁丢弃了它(以及为什么)以及最后谁消费了它。

理想情况下,应用程序中的每次点击都会在 Logcat 上发出某种低级转储。

正如您在 similar post at the issue tracker 中看到的那样,Dianne Hackborn 写道:

There currently isn't a way to do this.

也就是说,框架中没有API

但是你可以有一个自定义根 ViewGroup 并监听每个触摸事件(通过 onInterceptTouchEvent())和 dump the MotionEvent.

我认为这是目前唯一可行的方法。