Как отключить все события касания для всех дочерних элементов 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)
}
}
}