让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:
private int Void_SetColor_SetTime;
private int[] color;
private int index = 0;
private Paint paint;
private int time = 1000;
super(context, attrs, defStyle);
init();
}
this(context, attrs, 0);
}
this(context, null);
}
* 初始化
*/
private void init() {
setOnClickListener(ColorView.this);
paint = new Paint();
handler.sendEmptyMessage(0);
this.color = color;
}
this.time = time;
}
canvas.drawRect(0, 0, getWidth(), getHeight(), paint);
};
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
};
};
public void onClick(View v) {
if (index > color.length - 1) {
index = 0;
}
paint.setColor(color[index]);
index++;
invalidate();
}
private String count;
private String texts;
private int color;
super(context, attrs);
// init();
}
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);
}
}
for(Integer i : sTextsStartList) {
styledText.setSpan(new ForegroundColorSpan(color), i, i + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
List<Integer> sTextsStartList = new ArrayList<Integer>();
String temp = text;
int lengthFront = 0;
int start = -1;
do {
start = temp.indexOf(specifiedTexts);
start = start + lengthFront;
sTextsStartList.add(start);
lengthFront = start + sTextLength;
temp = text.substring(lengthFront);
}
for(Integer i : sTextsStartList) {
styledText.setSpan(new ForegroundColorSpan(color), i, i + sTextLength, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}