TextView算是Android开发中最最最最常用的控件之一了,有时候根据项目的需求,我们需要给一个TextView中的显示文本设置不同的样式。比如 "如果卖家在 06天22时16分 内处理
系统将自动退还给你" 这段文本需要显示在一个TextView中,而且有的字颜色不同,大小不一,还有背景颜色、下划线、删除线,粗体斜体等,甚至我们还需插入图片。那么对于项目经理这种形形色色的需求,我们解决方案是什么呢?其实方法有很多种,我们就使用Spannable类下的SpannableString来显示复合文本,可以通过它给文本设置各种各样的样式,下面我们就来看看SpannableString的一些常见用法。
一、效果图
二、详细用法
首先初始化一个TexView,定义一个String的字符串,然后用Spannable对文字进行处理,最后把文本显示在Text View上
mText = (TextView) findViewById(R.id.text);
String time = "06天22时16分";
Spannable wordtoSpan = new SpannableString("如果卖家在"+time+"内未处理,系统将自动退还给你.");
/**
* 文字背景颜色
*/
BackgroundColorSpan span = new BackgroundColorSpan(Color.YELLOW);
wordtoSpan.setSpan(span, 0, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
/**
* 字体大小
*/
AbsoluteSizeSpan span1 = new AbsoluteSizeSpan(36);
wordtoSpan.setSpan(span1, 5, 14, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
/**
* 粗体,斜体
*/
StyleSpan span2 = new StyleSpan(Typeface.BOLD_ITALIC);
wordtoSpan.setSpan(span2, 15, 18, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
/**
* 删除线
*/
StrikethroughSpan span3 = new StrikethroughSpan();
wordtoSpan.setSpan(span3, 19, 21, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
/**
* 下划线
*/
UnderlineSpan span4 = new UnderlineSpan();
wordtoSpan.setSpan(span4, 22, 27, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
/**
* 字体颜色
*/
wordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), 5, 14, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
wordtoSpan.setSpan(new ForegroundColorSpan(Color.RED), 19, 21, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
/**
* 图片
*/
Drawable d = getResources().getDrawable(R.mipmap.ic_launcher);
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
ImageSpan span5 = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);
wordtoSpan.setSpan(span5, 18, 19, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
mText.setText(wordtoSpan);