Обработка события onTouch в пользовательском контейнере с TextView в качестве содержимого
У меня следующая проблема.
В приложении Android есть собственный класс макета, который расширяет FrameLayout. Он переопределяет метод onTouchEvent для пользовательской реализации. У нас есть TextView, который находится в качестве содержимого этого класса макета. Мы хотим, чтобы ссылки URL в этом TextView были кликабельными. Для этого мы добавляем 'android:autoLink="web"' в свойство TextView. Следующий XML-код:
<PinchZoomScrollView
android:layout_weight="350"
android:layout_width="0dp"
android:layout_height="match_parent"
android:id="@+id/newsDetailScrollView">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:autoLink="web"
android:id="@+id/newsDetailText"/>
</PinchZoomScrollView>
После добавления autoLink = "web" создается впечатление, что onTouchEvent пользовательского класса макета "PinchZoomEvent" не вызывается. Кажется, что TextView со свойством autoLink как-то блокирует сенсорные события. Это странно, так как PinchZoomScrollView является родителем TextView, и он должен сначала получить событие. Что нужно сделать в этом случае?
1 ответ
Родители не получают автоматически прикосновения первыми в Android. Вы думаете о других рамках. Сенсорные события начинаются у детей и идут вверх по цепочке в Android. Если у вас есть родительский класс, такой как скроллер, который хочет перехватывать сенсорные события и, возможно, переопределять дочернее поведение, ему необходимо реализовать onInterceptTouchEvent и возвращать из него значение true, когда он обнаруживает действие, которое он хочет предпринять от дочерних элементов.