为文本的不同部分添加不同的背景色

时间:2021-01-17 14:51:39
在安卓中,有时候一句话中的文本有不同的颜色、大小,如果我们用不同TextView去拼接会增多view的个数,不利于性能优化。可以通过代码的方式在一个View中显示不同的文本属性。 方法一:嵌入HTML 如下,就是设置
        TextView       mTextView1 = (TextView) findViewById(R.id.tv_text);
String text ="my name is<font color=blue>hansheng1988</font>";
mTextView1.setText(Html.fromHtml(text));

方法二:SpannableString 类
* 对指定文本进行颜色和大小的改变处理
*
* @param first 第一段文本
* @param second 第二段文本
* @param firstColor 第一段文本的颜色
* @param secondColor 第二段文本的颜色
* @param firstSize 第一段文本的大小 单位px
* @param secondSize 第二段文本的大小 单位px
* @return 处理过的String
*/
public static SpannableString spanString(String first, String second, int firstColor,
int secondColor,
int firstSize, int secondSize) {
if (TextUtils.isEmpty(first) || TextUtils.isEmpty(second)) {
return null;
}
SpannableString spannableString = new SpannableString(first + second);
int start = first.length();
int end = spannableString.length();
if (firstSize != -1) {//字号
AbsoluteSizeSpan mFirstSize = new AbsoluteSizeSpan(firstSize);
spannableString.setSpan(mFirstSize, 0, start, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
if (firstColor != -1) {//颜色
ForegroundColorSpan mFirstColor = new ForegroundColorSpan(firstColor);
spannableString.setSpan(mFirstColor, 0, start, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
if (secondSize != -1) {
AbsoluteSizeSpan mSecondSize = new AbsoluteSizeSpan(secondSize);
spannableString.setSpan(mSecondSize, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
if (secondColor != -1) {
ForegroundColorSpan mSecondColor = new ForegroundColorSpan(secondColor);
spannableString.setSpan(mSecondColor, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}​
return spannableString;
}
SpannableString 类的其他作用在:http://blog.csdn.net/bihansheng2010/article/details/50385936