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



我有一个FrameLayout容器,里面有很多东西(包括ScrollViewWebViewViewPager......

我希望能够在这个容器上触发 onClick 事件,但似乎ScrollView中的一些人、WebViewViewPager拦截了触摸事件,因为 onClick 事件仅在我单击容器中没有任何部分时触发......

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

更新

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

谢谢

可能是我误解了什么,但我想你的问题的答案很简单:如果您不想将任何触摸事件分派给子项 - 因此您只需像这样覆盖ViewGroup.onInterceptTouchEvent (MotionEvent ev) API 引用:

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

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

您可以

像这样禁用它们:

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)
        }
    }
}

最新更新