2019-10-11 Android 高亮所有关键字TextView

package com.sgm.carlinkclass.widget;

import android.annotation.SuppressLint;

import android.content.Context;

import android.content.res.TypedArray;

import android.support.annotation.Nullable;

import android.text.SpannableStringBuilder;

import android.text.Spanned;

import android.text.TextUtils;

import android.text.style.ForegroundColorSpan;

import android.util.AttributeSet;

import android.widget.TextView;

import com.sgm.carlinkclass.R;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

@SuppressLint("AppCompatCustomView")

public class SignKeyWordTextViewextends TextView {

//关键字

    private StringsignText;

//关键字颜色

    private int signTextColor;

private int changeIndex =0;

public SignKeyWordTextView(Context context) {

super(context);

}

public SignKeyWordTextView(Context context,@Nullable AttributeSet attrs) {

super(context, attrs);

initializeAttrs(attrs);

}

public SignKeyWordTextView(Context context,@Nullable AttributeSet attrs,int defStyleAttr) {

super(context, attrs, defStyleAttr);

}

@Override

    public void setText(CharSequence text, BufferType type) {

changeIndex =0;

super.setText(matcherSignText(text.toString()), type);

}

//初始化自定义属性

    private void initializeAttrs(AttributeSet attrs) {

TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.SignKeyWordTextView);

//获取关键字

        signText = typedArray.getString(R.styleable.SignKeyWordTextView_signText);

//获取关键字颜色

        signTextColor = typedArray.getColor(R.styleable.SignKeyWordTextView_signTextColor, getTextColors().getDefaultColor());

typedArray.recycle();

}

public void setSignText(String signText) {

this.signText = signText;

setText(getText());

}

public void setSignTextColor(int signTextColor) {

this.signTextColor = signTextColor;

setText(getText());

}

// 高亮显示

    public SpannableStringBuilder matcherSignText(CharSequence mOriginalText) {

changeIndex++;

int change =0;

if (TextUtils.isEmpty(mOriginalText)) {

return new SpannableStringBuilder("");

}

if (TextUtils.isEmpty(signText)) {

return new SpannableStringBuilder(mOriginalText);

}

//关键代码

        SpannableStringBuilder builder =new SpannableStringBuilder(mOriginalText);

ForegroundColorSpan foregroundColorSpan =new ForegroundColorSpan(signTextColor);

Pattern p = Pattern.compile(signText);

Matcher m = p.matcher(mOriginalText);

while (m.find()) {

change++;

int start = m.start();

int end = m.end();

if (changeIndex == change) {

builder.setSpan(foregroundColorSpan, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

return matcherSignText(builder);

}

}

return builder;

}

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容