如何禁用ViewGroup的所有子项上的所有触摸事件?

时间:2012-04-23 12:54:42

标签: android webview onclick scrollview android-viewpager

我有一个包含许多内容的FrameLayout容器(包括ScrollViewWebViewViewPager ...)。

我希望能够触发此容器上的onClick事件,但似乎有ScrollViewWebViewViewPager拦截触摸事件,因为onClick事件只有当我点击容器中没有任何部分的部分时才会触发......

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

更新

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

由于

2 个答案:

答案 0 :(得分:18)

可能是我误解了一些事情,但我想你问题的答案很简单: 如果您不想向孩子发送任何触摸事件,那么您只需要覆盖ViewGroup.onInterceptTouchEvent (MotionEvent ev) API reference,如下所示:

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

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

答案 1 :(得分: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)
        }
    }
}