自动变色自定义View和自定义关键字变色TextView

来源:互联网 发布:ssh登录权限管理源码 编辑:程序博客网 时间:2024/05/19 23:16

让TextView中有一部分变色很多种方法:

1.

textview.setText(Html.fromHtml("<font color=\'#858585\'>后面文字颜色属性不一样:</font><font color=\'#f02387\'><U>变色文字</U></font>"));

2.

String wholeStr = "后面的颜色将要改变哈哈哈这是要改变的颜色";
StringFormatUtil spanStr = new StringFormatUtil(this, wholeStr, "这是要改变的颜色", R.color.blue).fillColor();
textview.setText(spanStr.getResult());

需要用到StringFormatUtil类:

源码:

public class StringFormatUtil {
    private SpannableStringBuilder spBuilder;
    private String wholeStr, highlightStr;
    private Context mContext;
    private int color;
    private int start = 0, end = 0;
    
    
    /**
     *
     * @param context
     * @param wholeStr 全部文字
     * @param highlightStr 改变颜色的文字
     * @param color 颜色
     */
    public StringFormatUtil(Context context,String wholeStr,String highlightStr,int color){
        this.mContext=context;
        this.wholeStr=wholeStr;
        this.highlightStr=highlightStr;
        this.color=color;
        
        
    }
    
    
    public StringFormatUtil fillColor(){
        if(!TextUtils.isEmpty(wholeStr)&&!TextUtils.isEmpty(highlightStr)){
            if(wholeStr.contains(highlightStr)){
                /*
                 *  返回highlightStr字符串wholeStr字符串中第一次出现处的索引。
                 */
                start=wholeStr.indexOf(highlightStr);
                end=start+highlightStr.length();
            }else{
                return null;
            }
        }else{
            return null;
        }
        spBuilder=new SpannableStringBuilder(wholeStr);
        color=mContext.getResources().getColor(color);
        CharacterStyle charaStyle=new ForegroundColorSpan(color);
        spBuilder.setSpan(charaStyle, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        return this;
    }
    
    
    public SpannableStringBuilder getResult(){
        if (spBuilder != null) {
            return spBuilder;
        }
        return null;
    }
}



自定义变色(也可点击变色)View:

public class ColorView extends View implements OnClickListener {
 private int Void_SetColor_SetTime;
 private int[] color;
 private int index = 0;
 private Paint paint;
 private int time = 1000;

 public ColorView(Context context, AttributeSet attrs, int defStyle) {
  super(context, attrs, defStyle);
  init();
 }

 public ColorView(Context context, AttributeSet attrs) {
  this(context, attrs, 0);
 }

 public ColorView(Context context) {
  this(context, null);
 }

 /**
  * 初始化
  */
 private void init() {
  setOnClickListener(ColorView.this);
  paint = new Paint();
  handler.sendEmptyMessage(0);

 }

 public void SetColor(int[] color) {
  this.color = color;
 }

 public void SetTime(int time) {
  this.time = time;
 }

 protected void onDraw(Canvas canvas) {
  canvas.drawRect(0, 0, getWidth(), getHeight(), paint);
 };

 Handler handler = new Handler() {
  public void handleMessage(android.os.Message msg) {
   if (index > color.length - 1) {
    index = 0;
   }
   paint.setColor(color[index]);
   index++;
   invalidate();
   handler.sendEmptyMessageDelayed(0, time);// time
  };
 };

 @Override
 public void onClick(View v) {
  if (index > color.length - 1) {
   index = 0;
  }
  paint.setColor(color[index]);
  index++;
  invalidate();
 }

}


自定义过滤控件TextView:

public class TextColor extends TextView {
 private String count;
 private String texts;
 private int color;

 public TextColor(Context context, AttributeSet attrs) {
  super(context, attrs);
  // init();
 }

 public void setAllTextsColor(String text, String specifiedTexts, int color) {
  List<Integer> sTextsStartList = new ArrayList<Integer>();
  for(int i = 0; i < specifiedTexts.length(); i++) {
   for(int j = 0; j < text.length(); j++) {
    if (text.charAt(j) == specifiedTexts.charAt(i)) {
     sTextsStartList.add(j);
    }
   }

  }

  SpannableStringBuilder styledText = new SpannableStringBuilder(text);
  for(Integer i : sTextsStartList) {
   styledText.setSpan(new ForegroundColorSpan(color), i, i + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
  }

  setText(styledText);
 }

 public void setMateTextsColor(String text, String specifiedTexts, int color) {
  List<Integer> sTextsStartList = new ArrayList<Integer>();

  int sTextLength = specifiedTexts.length();
  String temp = text;
  int lengthFront = 0;
  int start = -1;
  do {
   start = temp.indexOf(specifiedTexts);

   if (start != -1) {
    start = start + lengthFront;
    sTextsStartList.add(start);
    lengthFront = start + sTextLength;
    temp = text.substring(lengthFront);
   }

  } while(start != -1);

  SpannableStringBuilder styledText = new SpannableStringBuilder(text);
  for(Integer i : sTextsStartList) {
   styledText.setSpan(new ForegroundColorSpan(color), i, i + sTextLength, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
  }

  setText(styledText);
 }
}



1 0