项目里面有个搜索功能,需要将搜索结果标红,原理很简单,自定义textView,传入关键字(搜索的文字),将文字的颜色利用SpannableStringBuilder标红即可
public classSearTextViewextendsTextView {
publicSearTextView(Context context,AttributeSet attrs) {
super(context,attrs);
}
public voidsetSpecifiedTextsColor(String text,String specifiedTexts, intcolor) {
List sTextsStartList =newArrayList<>();
intsTextLength = specifiedTexts.length();
String temp = text;
intlengthFront =0;//记录被找出后前面的字段的长度
intstart = -1;
do{
start = temp.indexOf(specifiedTexts);
if(start != -1) {
start = start + lengthFront;
sTextsStartList.add(start);
lengthFront = start + sTextLength;
temp = text.substring(lengthFront);
if(text.toUpperCase().equals(text)){
}
}
}while(start != -1);
SpannableStringBuilder styledText =newSpannableStringBuilder(text);
for(Integer i : sTextsStartList) {
styledText.setSpan(
newForegroundColorSpan(color),
i,
i + sTextLength,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
setText(styledText);
}
}