我有一个自定义View
,它包含一个按钮,以及一个动画视图,该视图位于包含多项目自定义视图的按钮下方。当用户按下按钮时,我会显示项目的“下拉列表”。当我们在下拉列表外按下时,我想隐藏“下拉列表”。我尝试覆盖onTouchEvent
和onInterceptTouchEvent
,但这些并不总是被调用。
我查看了Spinner
的来源,并注意到Google正在使用Dialog来表示我认为它的下拉列表(此时它的定位方式在我之外)。
我有View
拦截Window
所有触摸事件的方法吗?
答案 0 :(得分:4)
您可以在onTouchListener
页面ViewGroup
上实施LinearLayout
(例如,event.getX()
或您正在使用的任何内容)。
然后,确定自定义视图的位置:如果触摸位置(使用event.getY()
和myView.getTop()
方法)在视图之外(使用myView.setVisibility(View.GONE
等),那么可以隐藏它(return false
)。
在任何情况下,都应View
允许孩子{{1}}处理。
来自android开发指南:
请记住,关键事件始终会传递到当前关注的视图。它们从View层次结构的顶部开始,然后向下调度,直到它们到达适当的目标。
注意:Android将首先调用事件处理程序,然后再调用类定义中的相应默认处理程序。因此,从这些事件侦听器返回true将停止将事件传播到其他事件侦听器,并且还将阻止对View中的默认事件处理程序的回调。因此,请确保在返回true时终止事件。
答案 1 :(得分:0)
我不知道它是如何工作的,但TouchDelegate
乍一看可能是一个解决方案。此外,Activity.onTouchEvent()
可能值得一试。
如果它们不适用(即您不知道如何使用TouchDelegate
并且您的布局具有可以在“下拉”视图之外执行触摸的按钮),您可以考虑{{3虽然它仍然朝着观点“向上”。