android - ClickableSpan 避免触摸传播到父 View

标签 android android-view onclicklistener android-4.0-ice-cream-sandwich clickablespan

我有一个 SpannableString 设置为我的 TextView 的文本,它位于另一个具有点击处理程序的 View 中。我的文本中有 ClickableSpan,您说得对,可以点击。

我的问题是,如果在可点击范围内点击,我需要捕获触摸事件,并且不传播到父 View (因为父 View 有另一个点击处理程序)。

容器 View 只是我应用程序中帖子的提要,这些帖子可以包含主题标签/提及/链接等。如果用户点击主题标签,他们应该转到由可点击范围处理的主题标签,否则,他们应该去邮局,这是由容器本身处理的。

是否有任何直接的机制来实现此功能?

最佳答案

我想出了一个糟糕的反模式解决方案,但效果很好。

在我的应用类中,我定义了:

public static boolean shouldIgnoreNextTouchEvent = false;

在我的 ClickableSpan 的点击处理程序中,我设置了一个全局标志以避免下一个触摸事件为真:

ClickableSpan clickableSpan = new ClickableSpan() {
    @Override
    public void onClick(View widget) {
        App.shouldIgnoreNextTouchEvent = true;
        ...
    }
 }

然后在我的父 View 的处理程序中:

@Override
public void onClick() {
    if(App.shouldIgnoreNextTouchEvent){
        App.shouldIgnoreNextTouchEvent = false;
        return;
    }
    ...
}

我知道这不是一个好的解决方案,但它的效果很好。

关于android - ClickableSpan 避免触摸传播到父 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38028565/

相关文章:

android - 如何在android中清除 View ?

android - 从 Kotlin RecyclerView(cardview) onclick 加载详细信息 View

Java、Android 将参数传递给方法

android - 添加 Firebase 库后无法构建 Android 应用程序

android - LVL 库 Google Play 许可响应代码始终未获得测试帐户的许可

java - 安卓 : Start Activity after button animation

android - 如何使 ListView 可点击? (不是项目点击!)

java - 使用 Scribe Library 的 Flickr Oauth 登录

android - 从非 UI 线程更新 View

android - 更改 SearchView 的边框颜色