Intereting Posts
Как уведомлять пользователей об обновлении Android-приложения? Просмотр проблемы, вызывающей SecondFragment из FirstFragment Как сделать границу выделения, которая отслеживает установленный переключатель? Получение геолокации через 20 секунд Как протестировать возможности напоминания о мобильном приложении в эмуляторе? Как преобразовать HashMap в json Array в android? Показать предыдущий фрагмент Я продолжаю получать сообщение об ошибке «Невозможно преобразовать из int в Drawable». Я пытаюсь назначить изображение местам. Есть ли способ обойти это? Есть ли Android-телефоны, поддерживающие расширенные APDU? Проверьте, находится ли точка внутри конуса в трехмерном пространстве Android отправляет SMS автоматически при нажатии кнопки Следующая кнопка на клавиатуре Android на EditText Значение ошибки Android Studio: переопределенные параметры аннотированных параметров @NonNull Как сделать EditText uneditable / disabled Ошибка: ресурс не найден, который соответствует указанному имени (в 'теме' со значением '@ style / AppTheme')

Как обрабатывать щелчок в дочерних представлениях и коснуться в родительских группах представлений?

В моем макете у меня есть такая структура:

--RelativeLayout | --FrameLayout | --Button, EditText... 

Я хочу обрабатывать события касания в RelativeLayout и в FrameLayout, поэтому я устанавливаю onTouchListener в этих двух группах представления. Но захватывается только касание RelativeLayout.

Чтобы попробовать это, я написал свой собственный CustomRelativeLayout и переопределил onInterceptTouchEvent , теперь щелчок в дочерней группе ViewGroup (FrameLayout) захвачен, но щелчок на кнопках и других представлениях не оказывает никакого влияния.

В моем собственном макете у меня есть следующее:

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

Вам необходимо переопределить onInterceptTouchEvent() для каждого дочернего onInterceptTouchEvent() , иначе он останется onTouchEvent для родителя.

Перехват сенсорных событий в ViewGroup

 @Override public boolean onInterceptTouchEvent(MotionEvent ev) { /* * This method JUST determines whether we want to intercept the motion. * If we return true, onTouchEvent will be called and we do the actual * scrolling there. */ ... // In general, we don't want to intercept touch events. They should be // handled by the child view. return false; } 

Вам нужно вернуть false, чтобы ребенок обрабатывал его, иначе вы возвращаете его родительскому.

Ваше пользовательское решение будет захватывать события касания из любого места в вашем относительном макете, поскольку переопределенный метод всегда задает значение true.

Для вашего требования я предполагаю, что лучше использовать метод onClick, а не использовать onTouch.

Метод OnTouch вызывает различные потоки на каждом TouchEvent, и я думаю, что это является причиной вашей проблемы

Вместо того, чтобы обрабатывать эти события, лучше попробовать метод onClick.