Android:如何在用户按下视图外时关闭自定义视图

时间:2011-04-20 23:35:35

标签: android view drop-down-menu spinner

我有一个自定义View,它包含一个按钮,以及一个动画视图,该视图位于包含多项目自定义视图的按钮下方。当用户按下按钮时,我会显示项目的“下拉列表”。当我们在下拉列表外按下时,我想隐藏“下拉列表”。我尝试覆盖onTouchEventonInterceptTouchEvent,但这些并不总是被调用。

我查看了Spinner的来源,并注意到Google正在使用Dialog来表示我认为它的下拉列表(此时它的定位方式在我之外)。

我有View拦截Window所有触摸事件的方法吗?

2 个答案:

答案 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虽然它仍然朝着观点“向上”。