Имеется два Layout:
A - RelativeLayout.
B - LinearLayout.
Вот пример разметки:
На Layout A я установил слушатель OnTouchListener. Мне нужно, чтобы при нажатии на область Layout B или на его потомков, слушатель не срабатывал, а при касании за границей Layout A срабатывал.
При нажатии на Spinner слушатель Layout A не срабатывает, т.к. на нем (спиннере) есть свой родной слушатель, однако у View его нет. Установить на него слушатель не вариант. Что делать?
Ответ
Добавьте OnTouchListener для Layout B и в нём устанавливайте значение булевой переменной, а в OnTouchListener для Layout A проверяйте значение этой переменной. Например, так:
boolean ChildTouched = false;
RelativeLayout ParentLayout = (RelativeLayout)findViewById(R.id.menuParentLayout);
ParentLayout.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (ChildTouched) {
ChildTouched = false;
return true;
}
System.out.println("Touch parent activity");
return true;
}
});
LinearLayout ChildLayout = (LinearLayout)findViewById(R.id.menuLayout);
ChildLayout.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
System.out.println("Touch child activity");
ChildTouched = true;
return true;
}
});
Комментариев нет:
Отправить комментарий