TextViewUtil 的工具类:

import android.text.SpannableString;import android.text.Spanned;import android.text.TextPaint;import android.text.style.ClickableSpan;import android.view.View;import java.util.List;/** * @author CHY *         Create at 2018/6/12 10:51. */public class TextViewUtil {    /**     * 设置字符串中某一关键字的颜色 (无点击事件)     *     * @param content 目标字符串     * @param keyStr  关键字     * @param color   关键字颜色     * @return     */    public static SpannableString setSpanColorStr(String content, String keyStr, final int color) {        SpannableString spannableString = new SpannableString(content);        if (content.contains(keyStr)) {            int startNew = 0;            int startOld = 0;            String temp = content;            while (temp.contains(keyStr)) {                spannableString.setSpan(                        new ClickableSpan() {                            @Override                            public void updateDrawState(TextPaint ds) {                                super.updateDrawState(ds);                                ds.setColor(color);                                ds.setUnderlineText(false);                            }                            @Override                            public void onClick(View widget) {                            }                        }, startOld + temp.indexOf(keyStr),                        startOld + temp.indexOf(keyStr) + keyStr.length(),                        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);                startNew = temp.indexOf(keyStr) + keyStr.length();                startOld += startNew;                temp = temp.substring(startNew);            }        }        return spannableString;    }    /**     * 设置字符串中多个不同关键字的颜色(颜色统一, 无点击事件)     *     * @param content 目标字符串     * @param keyStrs 关键字集合     * @param color   单一的颜色值     * @return     */    public static SpannableString setSpanColorStr(String content, List keyStrs, final int color) {        SpannableString spannableString = new SpannableString(content);        for (int i = 0; i < keyStrs.size(); i++) {            String keyStr = keyStrs.get(i);            if (content.contains(keyStr)) {                int startNew = 0;                int startOld = 0;                String temp = content;                while (temp.contains(keyStr)) {                    spannableString.setSpan(                            new ClickableSpan() {                                @Override                                public void updateDrawState(TextPaint ds) {                                    super.updateDrawState(ds);                                    ds.setColor(color);                                    ds.setUnderlineText(false);                                }                                @Override                                public void onClick(View widget) {                                }                            }, startOld + temp.indexOf(keyStr),                            startOld + temp.indexOf(keyStr) + keyStr.length(),                            Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);                    startNew = temp.indexOf(keyStr) + keyStr.length();                    startOld += startNew;                    temp = temp.substring(startNew);                }            }        }        return spannableString;    }    /**     * 设置字符串中多个关键字的不同颜色(颜色与关键字一一对应, 无点击事件)     *     * @param content 目标字符串     * @param keyStrs 关键字集合     * @param colors  颜色值的集合     * @return     */    public static SpannableString setSpanColorStr(String content, List keyStrs, final List colors) {        SpannableString spannableString = new SpannableString(content);        for (int i = 0; i < keyStrs.size(); i++) {            String keyStr = keyStrs.get(i);            if (content.contains(keyStr)) {                int startNew = 0;                int startOld = 0;                String temp = content;                while (temp.contains(keyStr)) {                    final int finalI = i;                    spannableString.setSpan(                            new ClickableSpan() {                                @Override                                public void updateDrawState(TextPaint ds) {                                    super.updateDrawState(ds);                                    ds.setColor(colors.get(finalI));                                    ds.setUnderlineText(false);                                }                                @Override                                public void onClick(View widget) {                                }                            }, startOld + temp.indexOf(keyStr),                            startOld + temp.indexOf(keyStr) + keyStr.length(),                            Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);                    startNew = temp.indexOf(keyStr) + keyStr.length();                    startOld += startNew;                    temp = temp.substring(startNew);                }            }        }        return spannableString;    }}

 

更多相关文章

  1. 安卓中颜色种类
  2. Android设置StatusBar颜色
  3. 更改ProgressBar颜色,SwipeBack滑动返回功能。
  4. Android状态栏完全透明和改变状态栏颜色实现
  5. Android之修改部分字体颜色
  6. android 读取资源字符串的 方法
  7. Android开发便签9:在android资源文件中定义字符串数组
  8. Android设置Selector不同状态下颜色及图片

随机推荐

  1. Android图形系统的分析与移植--一、Andro
  2. Andy Rubin 说:「市场上」有约 600 万台 A
  3. Android内核和驱动篇-Android内核介绍
  4. 10个 iOS 用户暂可以嘲笑 Android(安卓)
  5. 联发科智能机战略转投Android(安卓)加速
  6. Windows电脑:Android(安卓)Studio 连接不
  7. Android内核和驱动篇-Android内核介绍
  8. 2021年Android开发实战!带你一起探究Andro
  9. Android核心分析 之十一-------Android(
  10. 详解 Android(安卓)的 Activity 组件