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);
我有以下代码:
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);