我有一个 EditText 和 TextWatcher,我在其中检查模式以确定在哪里创建 ClickableSpans。
private void checkSpans(){
Matcher matcher = Pattern.compile("(^|[ \\t\\n])#\\w+").matcher(text);
while (matcher.find()) {
BlueClickableSpan[] spans = getText().getSpans(matcher.start(), matcher.end(), BlueClickableSpan.class);
for (BlueClickableSpan span : spans) {
text.removeSpan(span);
}
text.setSpan(new BlueClickableSpan(),
matcher.start(),
matcher.end(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
这是我的自定义 Span 类。
private class BlueClickableSpan extends ClickableSpan {
@Override
public void onClick(View view) {
Spanned s = getText();
int start = s.getSpanStart(this);
int end = s.getSpanEnd(this);
String clickedString = s.subSequence(start, end).toString().trim();
if (onSpanClick != null)
onSpanClick.onClick(clickedString);
}
@Override
public void updateDrawState(TextPaint ds) {
ds.setColor(ContextCompat.getColor(IdeaFlowApp.getAppContext(), R.color.main_blue));
}
}
问题是,当我用一个跨度结束我的文本并且它后面没有字符并且我点击它之后,它仍然算作点击跨度并调用 onClick。因此,我无法将光标放在跨度之后继续编辑。但是,如果我在跨度之后打印任何符号,甚至是空格,我可以轻松地将光标放在跨度之后,一切正常。如果没有超出符号,有什么方法可以在可点击跨度之后修复edittext中的点击?