1.首先重写关键字变色的ClickSpan,设置关键字的点击效果
package com.dejun.commonsdk.util;
import android.graphics.Color;
import android.text.TextPaint;
import android.text.style.ClickableSpan;
import android.view.View;
/**
* Author:DoctorWei
* Time:2018/12/24 18:20
* Description:带点击的关键字变色
* email:[email protected]
*/
public class NoUnderLineSpan extends ClickableSpan {
private String mColor;
private KeyWordClikListner keyWordClikListner;
public NoUnderLineSpan(String color, KeyWordClikListner keyWordClikListner) {
mColor = color;
this.keyWordClikListner = keyWordClikListner;
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
//去掉链接的下划线
ds.setColor(Color.parseColor(mColor));//context.getResources().getColor(color)
ds.setUnderlineText(false);
//需要在布局文件的textView中设置textColorLink点击selctor效果
ds.clearShadowLayer();//去掉上一个点击的textView的背景
}
@Override
public void onClick(View widget) {//关键字点击事件
//需要给textView设置tv.setMovementMethod(LinkMovementMethod.getInstance())否则没有点击效果
if (keyWordClikListner != null) {
keyWordClikListner.keyWordClick();
}
}
public interface KeyWordClikListner {
void keyWordClick();
}
}
2.将关键字变色
package com.dejun.commonsdk.util;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.TextPaint;
import android.text.style.ClickableSpan;
import android.text.style.ForegroundColorSpan;
import android.view.View;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Author:DoctorWei
* Time:2018/12/24 17:46
* Description:关键字变色
* email:[email protected]
*/
public class KeyWordColorUtil {
/**
* 区分大小写的关键字变色
* @param color
* @param text
* @param keyword
* @return
*/
public static SpannableString checkKeyWord(String color,String text,String keyword){
Pattern pattern=Pattern.compile(keyword);
Matcher matcher = pattern.matcher(text);
SpannableString spannableString=new SpannableString(text);
while (matcher.find()){
int start = matcher.start();
int end = matcher.end();
spannableString.setSpan(new ForegroundColorSpan(Color.parseColor(color)),start,end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
return spannableString;
}
/**
* 不区分大小写的关键字变色
* @param color
* @param text
* @param keyword
* @return
*/
public static SpannableString checkKeyWordWithoutUpOrLower(String color,String text,String keyword){
String toLowerCaseText = text.toLowerCase();
String toLowerCaseKeyword = keyword.toLowerCase();
return checkKeyWord(color,toLowerCaseText,toLowerCaseKeyword);
}
/**
* 带关键字点击效果的颜色变化
* @param color
* @param text
* @param keyword
* @param keyWordClikListner
* @return
*/
public static SpannableString checkKeyWordWithoutWithClick(String color,String text,String keyword,NoUnderLineSpan.KeyWordClikListner keyWordClikListner){
Pattern pattern=Pattern.compile(keyword);
Matcher matcher = pattern.matcher(text);
SpannableString spannableString=new SpannableString(text);
while (matcher.find()){
int start = matcher.start();
int end = matcher.end();
spannableString.setSpan(new NoUnderLineSpan(color,keyWordClikListner),start,end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
return spannableString;
}
}
3.使用
String keyWord="a";
String word="a说是什么是a ssssA";
SpannableString spannableString = KeyWordColorUtil.checkKeyWordWithoutWithClick("#ff1999", word, keyWord, new NoUnderLineSpan.KeyWordClikListner() {
@Override
public void keyWordClick() {
showMsg("点击");
}
});
tv.setText(spannableString);
tv.setMovementMethod(LinkMovementMethod.getInstance());