textview = (TextView) root.findViewById(R.id.textview);
String originString = "我最后一次声明,次声明次声明<@user>231:LGD</@user>是唯一指定TI7冠军TI7冠军,我最后一次TI7冠军,我最后一次TI7冠军,我最后一次" +
"TI7冠军,我最后一次TI7冠军,我最后一次,我最后一次声明,<@user>235:颜小波</@user>是唯一指定TI7冠军";
SpannableStringBuilder builder = new SpannableStringBuilder(originString);
final List<String> matchs = RegexUtils.getMatches(regx, originString);
final List<String[]> KeyWordList = new ArrayList<>();
for (int i = 0; i < matchs.size(); i++) {
String keyWord = matchs.get(i);
String keyWord2 = keyWord.replace("<@user>", "").replace("</@user>", "");
String[] KeyWord3 = keyWord2.split(":");
if (KeyWord3.length > 0) {
originString = originString.replace(keyWord, KeyWord3[1]);
}
KeyWordList.add(KeyWord3);
Log.e("originString", "originString===" + originString);
Log.e("KeyWord3[1]", "KeyWord3[1]===" + KeyWord3[1]);
if (matchs.size() - 1 == i) {
builder = new SpannableStringBuilder(originString);
for (int j = 0; j < matchs.size(); j++) {
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View widget) {
}
@Override
public void updateDrawState(TextPaint ds) {
ds.setColor(ContextCompat.getColor(mActivity, R.color.colorAccent));
ds.setUnderlineText(false);
}
};
builder = StringUtils.Myhighlight(originString, KeyWordList.get(j)[1], clickableSpan, builder);
}
}
}
textview.setMovementMethod(LinkMovementMethod.getInstance());
textview.setText(builder);
/**
* 关键字高亮显示
*
* @param target 需要高亮的关键字
* @param text 需要显示的文字
* @return spannable 处理完后的结果,记得不要toString(),否则没有效果
* // 调用
* // SpannableStringBuilder textString = TextUtilTools.highlight(item.getItemName(), KnowledgeActivity.searchKey);
* // vHolder.tv_itemName_search.setText(textString);
*/
public static SpannableStringBuilder Myhighlight(String text, String target, ClickableSpan clickSpan
,SpannableStringBuilder spannable) {
int flag = Spanned.SPAN_EXCLUSIVE_EXCLUSIVE;
CharacterStyle span = null;
Pattern p = Pattern.compile(target);
Matcher m = p.matcher(text);
while (m.find()) {
span = new ForegroundColorSpan(Color.parseColor("#fabe46"));
spannable.setSpan(span, m.start(), m.end(), flag);
spannable.setSpan(clickSpan, m.start(), m.end(), flag);
}
return spannable;
}