好久没写博客了,我们的项目忙完了,现在做下总结,我最大的收获也就是这个SpannableStringBuilder。首先,小弟向各位大神介绍下SpannableStringBuilder有哪些好用的地方:
1.可以设置TextView中字体的颜色
2.可以在TextView的文字中间插入一张图片
看了上面两点,如果你想到的第一种办法是写一个自定义控件,那么你跟我想的一样,哈哈。不过这里我要用SpannableStringBuilder,一个更好用的控件。
下面贴下我的代码:
<span style="font-size:14px;">private void drawTextView() {
// 需要处理的文本,[icon]是需要被替代的文本
String text = mTextView.getText().toString().trim();
if (TextUtils.isEmpty(text)) {
return;
}
int start = 2;
String label = "[icon]";
if (text.length() >= start) {
Drawable drawable = getResources().getDrawable(R.drawable.ic_yzt);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
StringBuffer buffer = new StringBuffer(text);
buffer = buffer.insert(start, label);
SpannableStringBuilder spannable = new SpannableStringBuilder(buffer);
int length = buffer.length();
// 高亮蓝色
CharacterStyle colorSpan = new ForegroundColorSpan(getResources().getColor(R.color.onebill_blue));
spannable.setSpan(colorSpan, start + label.length(), length - 2,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
//高亮白色 CharacterStyle不能被多个字段所公用
CharacterStyle colorSpanWhite1 = new ForegroundColorSpan(getResources().getColor(R.color.color_transparent_hint_withe));
CharacterStyle colorSpanWhite2 = new ForegroundColorSpan(getResources().getColor(R.color.color_transparent_hint_withe));
spannable.setSpan(colorSpanWhite1, 0, start,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannable.setSpan(colorSpanWhite2, length - 2, length,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
// 图片
CharacterStyle imageSpan = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE);
spannable.setSpan(imageSpan, start, start + label.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
<span style="font-family:Arial, Helvetica, sans-serif;">mTextView</span>.setText(spannable);
}
}</span>
好了 这里用到了几个好用的东西:
<span style="font-size:14px;">首先设置下CharacterStyle,然后spannable.setSpan设置部分字体颜色。 </span>
<span style="font-size: 14px;">插入图片的话,new一个ImageSpan,然后sapnnable.setSpan插入其中。</span>
<span style="font-size: 14px;">最后mTextView设置下text,到这里我们就大功告成了。</span>