Обработка события 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, когда он обнаруживает действие, которое он хочет предпринять от дочерних элементов.

Другие вопросы по тегам