您的位置:首页 > 其它

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

2016-01-04 16:48 239 查看
让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);

 }

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