如何使用ClickableSpan,但忽略来自TextView的点击

Fif*_*eep 8 android

以下代码显示了我如何使用自定义ClickableSpan和选择器应用按下状态.但是,每当我按下TextView上的任何位置时,都会应用按下状态,而不仅仅是ClickableSpan.我怎么阻止这个?

注意:它不会调用 onClick,但会 从选择器中应用state_pressed .我希望它不要做.

MyView.java

SpannableString spanned = new SpannableString("click here");
spannable.setSpan(new MyClickableSpan() {
        @Override
        public void onClick(View widget) {
            doSomething();
        }
    }, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(spanned);
textView.setMovementMethod(LinkMovementMethod.getInstance());
Run Code Online (Sandbox Code Playgroud)

MyClickableSpan.java

public abstract class MyClickableSpan extends ClickableSpan {

    @Override
    public abstract void onClick(View view);

    @Override
    public void updateDrawState(TextPaint ds) {
        super.updateDrawState(ds);
        ds.setUnderlineText(false);
    }
}
Run Code Online (Sandbox Code Playgroud)

TextView

<TextView
    android:id="@+id/my_text_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textColor="@android:color/white"
    android:textColorLink="@color/my_selector" />
Run Code Online (Sandbox Code Playgroud)

my_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="@color/my_color_pressed" />
    <item android:color="@color/my_color" />
</selector>
Run Code Online (Sandbox Code Playgroud)

编辑注释:添加了TextView代码

Bob*_*Bob 1

您必须将 MovementMethod 设置为具有 Span 的 TextView。

textView.setMovementMethod(LinkMovementMethod.getInstance());
Run Code Online (Sandbox Code Playgroud)