您的位置:首页 > 移动开发 > Android开发

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());// 设置变色文字点击事件
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: