android 中的可点击 SpannableString

Clickable SpannableString in android

我有以下代码:

SpannableString ss = new SpannableString("Translators");
ClickableSpan myClickableSpan = new ClickableSpan()
{
    @Override
    public void onClick(View v) {
    // do something;
    }
};
ss.setSpan(myClickableSpan, 0, ss.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

但是当我将 SpannableString 添加到字符串中时,无法点击且没有下划线

String thanks="Also thanks the "+ss;

有什么想法吗?

这一行是问题所在:

String thanks="Also thanks the "+ss;

+ 表达式的右侧是可跨越字符串,左侧是常规字符串(不支持跨越)。字符串上的 + 运算符导致 Java 编译器将 .toString() 放在 ss 变量之后(以空安全的方式),并将 spannable 字符串转换为普通字符串字符串丢弃跨度。

要修复它,请删除字符串连接。您可以使用 SpannableStringBuilder 代替 SpannableString,并使用 insert(...) 方法将 "Also thanks to the" 放在那里而不会丢失跨度。

虽然有一个更简单的方法,您的问题代码非常接近:

SpannableString ss = new SpannableString("Also thanks to the Translators");
ClickableSpan myClickableSpan = new ClickableSpan() { /*...*/ };

int spanStart = 20; // length of "Also thanks to the "
ss.setSpan(myClickableSpan, spanStart, ss.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);