/**
* 数字标红,见到数字就标红
*
* @return
*/
private SpannableString markNumber(String str) {
if (!Tools.isEmpty(str)) {
SpannableString spannableString = new SpannableString(str);
for (int i = 0; i < str.length(); i++) {
int start = str.length() - 1;
int end = 0;
if (isNumberChar(str.charAt(i))) {
start = i;
for (int j = i + 1; j < str.length(); j++) {
if (isNumberChar(str.charAt(j))) {
continue;
} else {
end = j - 1;
i = j;
break;
}
}
if (start <= end) {
//注意这里不要使用以下方式,否则只会把最后一个数字的颜色改变
// ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.parseColor(ORANGE_COLOR));
// spannableString.setSpan(colorSpan, start, end + 1,Spanned.SPAN_INCLUSIVE_INCLUSIVE);
spannableString.setSpan(new ForegroundColorSpan(Color.parseColor(ORANGE_COLOR)), start, end + 1,
Spanned.SPAN_INCLUSIVE_INCLUSIVE);
}
}
}
return spannableString;
} else {
return new SpannableString("");
}
}
**
* 判断字符是否是数字
*
* @param c
* @return
*/
private boolean isNumberChar(char c) {
return c >= 48 && c <= 57;
}
注意:在调用setSpan的时候,一个Span只会被使用一次,同时使用一个span,只会显示最后一次设置的效果,所以,这里new了一个新的Span,而不是复用一个。
网友评论
val sp = SpannableString(str)
val matcher = Pattern.compile("\\d+").matcher(str)
while (matcher.find()) {
sp.setSpan(ForegroundColorSpan(Color.BLUE), matcher.start(), matcher.end(), SpannableString.SPAN_INCLUSIVE_EXCLUSIVE)
}
tv_number.setText(sp)