如何禁用一个ViewGroup中的所有儿童都触摸事件?(How can I disable all

2019-06-23 20:35发布

我有一个FrameLayout含有很多东西(包括容器ScrollViewWebViewViewPager ...)。

我想能够触发该容器上的onClick事件,但似乎一些ScrollViewWebViewViewPager拦截触摸事件,因为onClick事件只是当我点击了容器的不部分触发有任何人...

如何禁用在容器的孩子所有触摸事件,为了能够触发的onClick在任何地方?

UPDATE

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

谢谢

Answer 1:

可能是我误会了什么,但我想回答你的问题很简单:如果你不想没有触摸事件分派给孩子-所以你只需要重写ViewGroup.onInterceptTouchEvent (MotionEvent ev) API参考如下:

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

按照Android文档,这意味着你的ViewGroup总会拦截所有触摸事件,并且不派遣他们的孩子。 他们都将被引导到ViewGroup.onTouchEvent(MotionEvent ev)您的ViewGroup的方法。



Answer 2:

你可以像这样禁用它们:

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


文章来源: How can I disable all touch events on all children of a ViewGroup?