11

我有一个FrameLayout包含很多东西的容器(包括ScrollView, WebView, ViewPager...)。

我希望能够在这个容器上触发 onClick 事件,但似乎有一些ScrollView,WebViewViewPager拦截了 touch 事件,因为 onClick 事件只有在我点击容器中没有的部分时才会触发他们...

如何禁用容器子级上的所有触摸事件,以便能够在其中的任何位置触发 onClick?

更新

这个想法是在 Android 3.2 中拥有类似任务管理器的东西,即应用程序的当前可见屏幕显示为缩小的图标,可以单击。

谢谢

4

2 回答 2

19

可能是我误解了一些东西,但我想你的问题的答案很简单:如果你不想向孩子发送任何触摸事件 - 所以你只需要像这样覆盖ViewGroup.onInterceptTouchEvent (MotionEvent ev) API 引用

public boolean onInterceptTouchEvent (MotionEvent ev){
    return true;
}

根据 android 文档,这意味着您的 ViewGroup 将始终拦截所有触摸事件并且不会将它们分派给孩子。所有这些都将被定向到ViewGroup.onTouchEvent(MotionEvent ev)您的 ViewGroup 的方法。

于 2012-10-19T15:54:12.207 回答
0

您可以像这样禁用它们:

FrameLayout parent = (FrameLayout)findViewById(some_id);
disableChildsOnTouch(parent)


public void disableChildsOnTouch(ViewGroup viewGroup){
    int cnt = viewGroup.getChildCount();
    for (int i = 0; i < cnt; i++){
        View v = viewGroup.getChildAt(i);
        if (v instanceof ViewGroup){
            disableChildsOnTouch((ViewGroup)v);
        } else {
            v.setOnTouchListener(null);
            v.setOnClickListener(null);
            //v.SETYOURLISTENER(null)
        }
    }
}
于 2012-04-23T13:13:40.277 回答