android 更改TextView部分字体颜色、大小、背景
2017-05-21 09:38
543 查看
android 更改TextView部分字体颜色、大小、背景
一、效果图
二、工具类
TextColorHelper.javapublic 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);//绘制文字 } }
相关文章推荐
- Android 通过按钮Button更改全部的TextView、EditText、Button的字体大小、字体颜色、背景颜色
- Android textview 同时改变字符串中部分字体的颜色与大小
- Android 修改TextView中部分字体的颜色及大小
- Android textview 同时改变字符串中部分字体的颜色与大小
- Android textview 同时改变字符串中部分字体的颜色与大小
- Android 调整控件位置和大小(以textView为例,并设置字体与背景颜色)
- Android TextView设置部分字体颜色改变,部分字体背景改变
- android 更改TextView中任意位置字体大小和颜色
- android TextView控件加背景和字体颜色多状态控制时,部分状态不起作用问题
- android 更改TextView中任意位置字体大小和颜色的方法
- android TextView改变部分字体的颜色,大小,设置部分字体有点击事件
- 给TextView加上多彩效果:改变部分字体的大小和颜色
- android--设置TextView部分文字的颜色和背景(高亮显示)
- android TextView、EditText对部分内容设置颜色、字体、超链接、图片
- android TextView 结合SpannableString对部分内容设置颜色、字体、超链接、图片
- android 通过一Textview设置不同大小的字体颜色
- 最新历史版本 :android--设置TextView部分文字的颜色和背景(高亮显示)
- Android中TextView通过SpannableString设置字体、大小、颜色、样式、超级链接
- android TextView、EditText对部分内容设置颜色、字体、超链接、图片
- Android TextView 一些字体颜色、大小设置属性