您的位置:首页 > 移动开发 > Android开发

android 更改TextView部分字体颜色、大小、背景

2017-05-21 09:38 543 查看

android 更改TextView部分字体颜色、大小、背景

一、效果图



二、工具类

TextColorHelper.java

public class TextColorSizeHelper {

/**
* 更改TextView某一段字体的颜色值
*
* @param context
* @param text
* @param subTextArray
* @return
*/
public static SpannableStringBuilder getTextSpan(Context context,
int subTextBgColor,
String text, String... subTextArray) {
if (context == null || text == null || subTextArray == null)
return null;
SpannableStringBuilder style = new SpannableStringBuilder(text);
int begin = 0;
int end = 0;
for (int i = 0; i < subTextArray.length; i++) {
String subText = subTextArray[i];
begin = text.indexOf(subText, end);
end = begin + subText.length();
//
style.setSpan(new ForegroundColorSpan(subTextBgColor), begin, end,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}

return style;
}

/**
* 更改TextView某一段字体的颜色(字体带圆角背景)
*
* @param context
* @param text
* @param subTextArray
* @return
*/
public static SpannableStringBuilder getTextSpan(Context context,
int subTextColor, int subTextBgColor, int radius,
String text, String... subTextArray) {
if (context == null || text == null || subTextArray == null) {
return null;
}
SpannableStringBuilder style = new SpannableStringBuilder(text);
int begin = 0;
int end = 0;
for (int i = 0; i < subTextArray.length; i++) {
String subText = subTextArray[i];
begin = text.indexOf(subText, end);
end = begin + subText.length();
//
style.setSpan(new RadiusBackgroundSpan(subTextColor, subTextBgColor, radius), begin, end,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
return style;
}

/**
* @param context
* @param text
* @param subTextArray
* @return
*/
public static SpannableStringBuilder getTextSpan(Context context,
int subTextColor, int subTextSize,
String text, String... subTextArray) {
if (context == null || text == null || subTextArray == null) {
return null;
}
SpannableStringBuilder style = new SpannableStringBuilder(text);
int begin = 0;
int end = 0;
for (int i = 0; i < subTextArray.length; i++) {
String subText = subTextArray[i];
begin = text.indexOf(subText, end);
end = begin + subText.length();
//
style.setSpan(new AbsoluteSizeSpan(subTextSize), begin, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
style.setSpan(new ForegroundColorSpan(subTextColor), begin, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
return style;
}
}


三、使用举例

// ###########更改TextView部分字体颜色###########
//
int subTextColor = Color.parseColor("#af5050");
String text = "100minutes10minutes";
String[] subTextArray = {"100", "10"};
//
mTextView01.setText(TextColorSizeHelper.getTextSpan(this, subTextColor, text, subTextArray));

// ###########更改TextView部分字体颜色大小背景###########
//
subTextColor = Color.parseColor("#af5050");
int subTextBgColor = Color.parseColor("#ffffff");
int radius = 10;
//
mTextView02.setText(TextColorSizeHelper.getTextSpan(this, subTextColor, subTextBgColor, radius, text, subTextArray));

// ###########更改TextView部分字体颜色和大小############
//
subTextColor = Color.parseColor("#af5050");
int subTextSize = 180;
//
mTextView03.setText(TextColorSizeHelper.getTextSpan(this, subTextColor, subTextSize, text, subTextArray));


RadiusBackgroundSpan.java

RadiusBackgroundSpan.java工具类来自于以下链接:

http://blog.csdn.net/industriously/article/details/53493392

public class RadiusBackgroundSpan extends ReplacementSpan {

private int mSize;
private int mTextColor;
private int mRadiusBgColor;
private int mRadius;

/**
* @param radiusBgColor 背景颜色
* @param radius        圆角半径
*/
public RadiusBackgroundSpan(int textColor, int radiusBgColor, int radius) {
this.mTextColor = textColor;
this.mRadiusBgColor = radiusBgColor;
this.mRadius = radius;
}

@Override
public int getSize(Paint paint, CharSequence text, int start, int end, Paint.FontMetricsInt fm) {
mSize = (int) (paint.measureText(text, start, end) + 2 * mRadius);
return mSize;
}

@Override
public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) {
int color = paint.getColor();//保存文字颜色
paint.setColor(mRadiusBgColor);//设置背景颜色
paint.setAntiAlias(true);// 设置画笔的锯齿效果
Log.i("pyt", y + "");
RectF oval = new RectF(x, y + paint.ascent(), x + mSize, y + paint.descent());
//设置文字背景矩形,x为span其实左上角相对整个TextView的x值,y为span左上角相对整个View的y值。paint.ascent()获得文字上边缘,paint.descent()获得文字下边缘
canvas.drawRoundRect(oval, mRadius, mRadius, paint);//绘制圆角矩形,第二个参数是x半径,第三个参数是y半径
paint.setColor(mTextColor);//恢复画笔的文字颜色
canvas.drawText(text, start, end, x + mRadius, y, paint);//绘制文字
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐