Страницы

Поиск по вопросам

четверг, 29 ноября 2018 г.

OnTouchListener у Layout


Имеется два 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; } });

Комментариев нет:

Отправить комментарий