android TextView 部分文字变色 工具类
2018-03-20 10:32
477 查看
public class ColorTextUtil { private static final String TAG = "ColorTextUtil"; private ColorTextUtil() { } /** * 设置 TextView 中部分文字颜色 (不设置 变色文字点击事件). */ public static void setColorText(TextView tv, @StringRes int allTextId, @StringRes int colorTextId, @ColorRes int colorId) { setColorTextClick(tv, allTextId, colorTextId, colorId, null); } /** * 设置 TextView 中部分文字颜色 (不设置 变色文字点击事件). */ public static void setColorText(TextView tv, String allTextStr, String colorTextStr, @ColorRes int colorId) { setColorTextClick(tv, allTextStr, colorTextStr, colorId, null); } /** * 设置 TextView 中部分文字颜色. * * @param allTextId 全部文字 * @param colorTextId 需要改变颜色的文字 * @param colorId 改变的颜色 * @param onColorTextClickListener 改变颜色文字的点击事件. */ public static void setColorTextClick(TextView tv, @StringRes int allTextId, @StringRes int colorTextId, @ColorRes int colorId, OnColorTextClickListener onColorTextClickListener) { Context context = tv.getContext(); String allTextStr = context.getResources().getString(allTextId); String colorTextStr = context.getResources().getString(colorTextId); setColorTextClick(tv, allTextStr, colorTextStr, colorId, onColorTextClickListener); } /** * 设置 TextView 中部分文字颜色. * * @param allTextStr 全部文字 * @param colorTextStr 需要改变颜色的文字 * @param colorId 改变的颜色 * @param onColorTextClickListener 改变颜色文字的点击事件. */ public static void setColorTextClick(TextView tv, String allTextStr, String colorTextStr, @ColorRes int colorId, OnColorTextClickListener onColorTextClickListener) { LogUtil.i(TAG, "allTextStr: " + allTextStr); LogUtil.i(TAG, "colorTextStr: " + colorTextStr); if (!allTextStr.contains(colorTextStr)) { throw new RuntimeException(allTextStr + " 不包含 " + colorTextStr + " 文字"); } Context context = tv.getContext(); int start = allTextStr.indexOf(colorTextStr); int end = start + colorTextStr.length(); SpannableString spanText = new SpannableString(allTextStr); spanText.setSpan(new ClickableSpan() { @Override public void updateDrawState(TextPaint ds) { super.updateDrawState(ds); ds.setColor(context.getResources().getColor(colorId)); //设置文字颜色 ds.setUnderlineText(false); } @Override public void onClick(View view) { if (null != onColorTextClickListener) { onColorTextClickListener.onColorTextClick(view); } } }, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); tv.setHighlightColor(context.getResources().getColor(R.color.transparent));// 设置点击后的颜色为透明,否则会一直出现高亮 tv.setText(spanText); tv.setMovementMethod(LinkMovementMethod.getInstance());// 设置变色文字点击事件 } }
相关文章推荐
- Android文字局部变色 TextView文字部分变色代码
- Android TextView 部分文字变色添加点击事件
- Android利用SpannableStringBuilder设置TextView中部分文字的颜色...
- android textview改变部分文字的颜色和string.xml中文字的替换
- 【Android】在控件、视图绘制或改变之后如何获取其部分状态和属性(比如高、宽、TextView绘制后的文字行数等)
- Android中TextView中部分文字有不同颜色的实现
- android textview 部分文字加颜色并可点击
- android--设置TextView部分文字的颜色和背景(高亮显示)
- 『ANDROID』android-修改TextView中部分文字的颜色
- android textview改变部分文字的颜色和string.xml中文字的替换
- 解决:android TextView上响应部分文字的事件
- android textview 部分文字点击事件
- android-修改TextView中部分文字的颜色
- android 为TextView的部分文字设置超链接样式并监听点击事件
- 解决:android TextView上响应部分文字的事件
- android--设置TextView部分文字的颜色和背景(高亮显示)
- Android中TextView实现部分文字可点击跳转
- Android之TextView实现文字过长时省略部分或者滚动显示
- 【Android 】TextView 局部文字变色
- android textview改变部分文字的颜色