在自定义容器中处理 onTouch 事件,以 TextView 作为内容

Handling onTouch event in a custom container, with TextView as content

我有以下问题。

在 Android 应用程序中,有一个自定义布局 class,它扩展了 FrameLayout。它覆盖了自定义实现的 onTouchEvent 方法。我们有一个 TextView 作为此布局的内容 class。我们希望此 TextView 中的 URL 链接是可点击的。为此,我们将 '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"后,自定义布局class"PinchZoomEvent"的onTouchEvent好像没有被调用。似乎带有 autoLink 属性 的 TextView 以某种方式阻止了触摸事件。这很奇怪,因为 PinchZoomScrollView 是 TextView 的父级,它应该首先接收事件。在这种情况下应该怎么办?

Parents 不会在 Android 中自动首先接收触摸。您正在考虑其他框架。触摸事件从 children 开始,并在 Android 链中向上移动。如果你有一个 parent class 比如想要拦截触摸事件并可能覆盖 child 行为的滚动条,它需要实现 onInterceptTouchEvent,并且 return true 从它当它检测到要从 children.

采取的行动时