Как отключить все события касания для всех дочерних элементов ViewGroup?

у меня есть FrameLayout контейнер, содержащий много вещей (в том числе ScrollView, WebView, ViewPager...).

Я хотел бы иметь возможность запускать событие onClick в этом контейнере, но кажется, что некоторые из ScrollView, WebView и ViewPager перехватить событие касания, потому что событие onClick запускается только тогда, когда я нажимаю на части контейнера, которые не имеют ни одного из них...

как я могу отключить все события касания на детях контейнера, чтобы быть в состоянии вызвать onClick в любом месте?

обновление

идея состоит в том, чтобы иметь что-то вроде диспетчера задач в Android 3.2, т. е. где текущий видимый экран приложения отображается как уменьшенный значок, который можно щелкнуть.

спасибо

2 ответов


может быть, я что-то неправильно понял, но я думаю, что ответ на ваш вопрос очень прост: Если вы не хотите отправлять ни одно из сенсорных событий детям - вам просто нужно переопределить ViewGroup.onInterceptTouchEvent (MotionEvent ev) ссылка на API такой:

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

согласно документации android это означает, что ваша ViewGroup всегда будет перехватывать все сенсорные события и не отправлять их детям. Все они будут направлены в ViewGroup.onTouchEvent(MotionEvent ev) метод ViewGroup.


вы можете отключить их так:

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