【发布时间】:2018-05-17 00:00:03
【问题描述】:
给定具有任意子视图集合的任意 ViewGroup G,我如何检测用户何时单击任何子视图?在这种情况下,我想为 G 画一个高光。
我可以为每个孩子添加一个 onClick 侦听器,但我试图避免这种情况,以便在布局更改时不必更改代码。
或者,我可以将 onTouch 处理程序添加到 G 并在 ACTION_DOWN 期间设置突出显示。但是,这会触发实际上不会导致点击的操作,例如滑动(例如,滑动可以由 ViewPager 处理,最终与 G 无关)。
我的 G 布局具有可聚焦的属性:
android:focusable="true"
android:focusableInTouchMode="true"
谢谢。
【问题讨论】:
-
首先:OnClicklistener 是 touchlistener 的一个实现,所以如果 onClick 不符合您的要求,那么您应该创建自己的。我建议看一下 View 的源代码,在那里你会发现 onTouchEvent 方法会调用 ClickListener (performClick())。第二:理论上应该可以确定是否应该将触摸事件分派到视图或视图分页器(onTouchIntercept)。准备弄脏你的手,这并不容易;)
-
是的,onTouchEvent() 是所有点击等的基础。我认为看的正确位置是 AbsListView.onTouchUp()。有一个代码之谜可能正是我正在寻找的。span>