用过Textview设置过字体颜色、大小和emoji之类的同学都知道,要给文字实现丰富多彩的效果就得用到SpannableString或SpannableStringBuilder,这里要实现的效果还是要用到SpannableStringBuilder。
先看效果图
下面我来说说如何使用SpannableStringBuilder来实现这个效果先看源码(匹配用户和话题使用的是正则表达式)
static class Section {
int start;
int end;
Section(int start, int end) {
this.start = start;
this.end = end;
}
}
定义一个结构保存要改变文字的起始位置。
使用list来保存所有匹配成功的字段。
final ArrayList<Section> sections = new ArrayList<>();
int start = matcher.start(1);
int end = start + at.length();
Section section = new Section(start, end);
sections.add(section);
在MotionEvent.ACTION_DOWN这里获取点击点在字符串中的位置index,这里使用textview的layout来获取。