1、ClickableSpan的使用
下面方法给字符串中数字添加点击事件:
private SpannableString spannableText(String text){
if(TextUtils.isEmpty(text)){
return SpannableString.valueOf("");
}
Pattern p = Pattern.compile("(120)|(110)|(119)|(122)|(114)|(121)|(999)|([0-9]{5,13})");
Matcher m = p.matcher(text);
SpannableString temp = new SpannableString(text);
int textColor = getResources().getColor(R.color.colorTheme);
while (m.find()){
int start = m.start();
int end = m.end();
String tel = m.group();
ForegroundColorSpan colorSpan = new ForegroundColorSpan(textColor);
temp.setSpan(colorSpan,start,end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(@NonNull View widget) {
dialPhone(tel);
}
@Override
public void updateDrawState(@NonNull TextPaint ds) {
ds.setUnderlineText(true);
}
};
temp.setSpan(clickableSpan,start,end,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
return temp;
}
2、问题
例如,字符串是“姓名:张三\r\n电话:11111111111\r\n性别:男\r\n亲属电话:22222222222”。
问题:使用上面方法添加点击事件后,会发现点击数字后的空白地方,也会执行点击事件。
解决方法:在可能出现空白区域的字符串后添加一个空格字符“\u3000”,即可解决问题。
例如,上面字符串修改后即是:“姓名:张三\r\n电话:11111111111\u3000\r\n性别:男\r\n亲属电话:22222222222\u3000”