android修改TextView中部分文字的颜色来实现高亮效果
16lz
2021-01-26
概述
我们在做项目的过程中经常需要关键字高亮来提醒用户。 就比如我们在ide中一些系统级的关键字会以不同的颜色来展示一样。
最近我看设计图中有一个很眼熟的效果,由于之前写过但是没有留下任何痕迹,所以这次又写了一个工具类。记录一下,方便以后的使用。
/** * * @param text 文字的总内容 * @param indexStr 关键字的内容 * @param color 关键字的颜色 * @return */ public SpannableStringBuilder setColor(String text, String indexStr, int color) { // 记录关键字的次数 与他在整个字符中所占的索引位置 String[] deStr = text.split(indexStr); ArrayList objects = new ArrayList<>(deStr.length); int cycleSize = text.endsWith(indexStr) ? deStr.length : deStr.length - 1; for (int i = 0; i < cycleSize; i++) { Entity entity = new Entity(); int index; if (i == 0) { index = text.indexOf(indexStr); } else { Entity entity1 = objects.get(i - 1); index = text.indexOf(indexStr, entity1.end); } entity.start = index; entity.end = index + indexStr.length(); objects.add(entity); } //根据索引集合 来设置关键字 字体颜色 SpannableStringBuilder builder = new SpannableStringBuilder(text); for (int i = 0; i < objects.size(); i++) { //这个实例设置一次关键字的时候就要重新实例一次 ForegroundColorSpan redSpan = new ForegroundColorSpan(color); builder.setSpan(redSpan, objects.get(i).start, objects.get(i).end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } return builder; } private static volatile TextSpanUtil mTextSpanUtil; public static TextSpanUtil getInstant() { if (null == mTextSpanUtil) { synchronized (TextSpanUtil.class) { if (null == mTextSpanUtil) { mTextSpanUtil = new TextSpanUtil(); } } } return mTextSpanUtil; } public class Entity { public int start; public int end; @Override public String toString() { return "Entity{" + "start=" + start + ", end=" + end + '}'; } }
这里需要注意的是。因为我们用的是split 分隔符,所以如果关键字在整个字段末尾的话是不会多出一个字段的。 但如果是在首位就不会出现问题。
举个栗子: 如果内容为
“关键字abc关键字edfg关键字hi关键字j”
那么分割的内容为
[, abc, edfg, hi, j]
如果关键字在末尾
“abc关键字edfg关键字hi关键字”
那么结果为:
[abc, edfg, hi, j]
这个问题在以上的方法体中已经做过处理了。
更多相关文章
- android: Error:元素内容必须由格式正确的字符数据或标记组成
- React Native 中的状态栏(Android沉浸式)
- 7种例子讲解Android(安卓)Dialog!
- 使用内容提供器跨应用分享你的数据(1)
- Andriod内嵌HTML5项目构建以及整包更新配置
- scrollTo和getScrollY表象和源码结合效果更佳!
- [置顶] 为学Android,我看了这些书
- latex/Xelatex书籍排版总结---顺便附上一本排好的6寸android书…
- Android中仿QQ聊天内容中提取电话号码,URL