首页 > 解决方案 > Android - clickableSpan 和 TextView 的问题

问题描述

我正在尝试在我的 TextView 中实现可点击的主题标签,如下所示:

mTextView.setMovementMethod(LinkMovementMethod.getInstance());

Spannable s = (Spannable) mTextView.getText();
CharacterStyle clickableSpan = new MyClickableSpan();
s.setSpan(clickableSpan, startIndex, endIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

这可以根据需要处理我的主题标签的 onClick,但似乎文本的另一部分也侦听 onClick 事件并且什么都不做。

我的问题是如何制作不可跨越的文本部分,将 onClick 事件委托给父视图,如下图所示。

在此处输入图像描述

标签: android

解决方案


I figured out my question with this solution but if anyone had a better solution please let me know.

I set OnClickListener for my TextView and in the onClick event I get the parent of my TextView and check if the parent is clickable then perform parent onClick event and if not I recursively get the parent of the parent until I achieve to clickable parent. In this way, hashtags still are clickable with own actions and when clicking another part of the text the onClick event of the parent is performed.

here is the code of how I recursively find clickable parent:

private View getParentClickable(View view) {
    try {
        if (((View) view.getParent()).isClickable()) {
            return (View) view.getParent();
        } else {
            return getParentClickable(((View) view.getParent()));
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

and then setOnClickListener for my view:

mTextView.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
       View parent = getParentClickable(mTextView);
       if (parent != null) parent.performClick();
   }
});

推荐阅读