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

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

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

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

ОБНОВЛЕНИЕ

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

Спасибо


person jul    schedule 23.04.2012    source источник


Ответы (2)


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

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

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

person rus1f1kat0R    schedule 19.10.2012

Вы можете отключить их следующим образом:

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)
        }
    }
}
person Rafael T    schedule 23.04.2012
comment
ScrollView по-прежнему прокручивается, а контейнер onClick по-прежнему не запускается при отключении всех дочерних элементов... :( - person jul; 23.04.2012
comment
не должен прокручиваться scrollView? Если нет, вы можете проверить View v выше, если это scrollView, и отключить там прокрутку. Я не могу сказать вам больше с таким меньшим количеством информации. Вы могли бы хотя бы опубликовать свой XML, чтобы я увидел, в чем может быть проблема - person Rafael T; 23.04.2012
comment
Я обновил свой вопрос, почему я хочу это сделать. Я не думаю, что требуется дополнительная информация: я просто хочу иметь возможность запускать событие onClick в группе просмотра, содержащей такие представления, как scrollview, viewpager... - person jul; 23.04.2012