自动变色自定义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);
}
}
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);
}
}
相关文章推荐
- Android的TextView与Html相结合的具体方法
- Android中实现为TextView添加多个可点击的文本
- android textview 显示html方法解析
- Android开发技巧之在a标签或TextView控件中单击链接弹出Activity(自定义动作)
- Android实现TextView中文字链接的4种方式介绍及代码
- android TextView属性的详细介绍 分享
- Android开发实现TextView显示丰富的文本
- Android编程中TextView宽度过大导致Drawable无法居中问题解决方法
- Android TextView显示html样式的文字
- android TextView加下划线的方法
- android TextView多行文本(超过3行)使用ellipsize属性无效问题的解决方法
- Android编程中TextView字体属性设置方法(大小、字体、下划线、背景色)
- Android编程开发之TextView文字显示和修改方法(附TextView属性介绍)
- android显示TextView文字的倒影效果实现代码
- Android控件之TextView的分析探究
- TextView显示系统时间(时钟功能带秒针变化
- Android编程实现TextView字体颜色设置的方法小结
- Android编程实现TextView部分颜色变动的方法
- android TextView不用ScrollViewe也可以滚动的方法
- android开发教程之textview内容超出屏幕宽度显示省略号