SpannableString其实和String一样,都是一种字符串类型,SpannableString可以直接作为TextView的显示文本,不同的是SpannableString可以通过使用其方法setSpan方法实现字符串各种形式风格的显示,重要的是可以指定设置的区间,也就是为字符串指定下标区间内的子字符串设置格式。
setSpan(Object what, int start, int end, int flags)方法需要用户输入四个参数,what
表示设置的格式是什么,可以是前景色、背景色也可以是可点击的文本等等,start
表示需要设置格式的子字符串的起始下标,同理end
表示终了下标,flags
属性就有意思了,共有四种属性:
Spanned.SPAN_INCLUSIVE_EXCLUSIVE
从起始下标到终了下标,包括起始下标
Spanned.SPAN_INCLUSIVE_INCLUSIVE
从起始下标到终了下标,同时包括起始下标和终了下标
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
从起始下标到终了下标,但都不包括起
SpannableString spannableString = new SpannableString("设置文字的前景色为淡蓝色");
ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.parseColor("#0099ee"));
spannableString.setSpan(colorSpan, 9, spannableString.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
textView1.setText(spannableString);
SpannableString spannableString2 = new SpannableString("设置文字的背景色为淡绿色");
BackgroundColorSpan colorSpan2 = new BackgroundColorSpan(Color.parseColor("#AC00FF30"));
spannableString2.setSpan(colorSpan2, 9, spannableString2.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
textView2.setText(spannableString2);
SpannableString spannableString3 = new SpannableString("哈哈哈哈哈哈哈哈哈哈哈");
RelativeSizeSpan sizeSpan1 = new RelativeSizeSpan(1.0f);
RelativeSizeSpan sizeSpan2 = new RelativeSizeSpan(1.2f);
RelativeSizeSpan sizeSpan3 = new RelativeSizeSpan(1.4f);
RelativeSizeSpan sizeSpan4 = new RelativeSizeSpan(1.6f);
RelativeSizeSpan sizeSpan5 = new RelativeSizeSpan(1.8f);
spannableString3.setSpan(sizeSpan1, 0, 1, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spannableString3.setSpan(sizeSpan2, 1, 2, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spannableString3.setSpan(sizeSpan3, 2, 3, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spannableString3.setSpan(sizeSpan4, 3, 4, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spannableString3.setSpan(sizeSpan5, 4, 5, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
textView3.setText(spannableString3);
SpannableString spannableString4 = new SpannableString("为文字设置删除线");
StrikethroughSpan strikethroughSpan = new StrikethroughSpan();
spannableString4.setSpan(strikethroughSpan, 5, spannableString4.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
textView4.setText(spannableString4);
SpannableString spannableString5 = new SpannableString("为文字设置下划线");
UnderlineSpan underlineSpan = new UnderlineSpan();
spannableString5.setSpan(underlineSpan, 5, spannableString5.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
textView5.setText(spannableString5);
SpannableString spannableString6 = new SpannableString("为文字设置上标");
SuperscriptSpan superscriptSpan = new SuperscriptSpan();
spannableString6.setSpan(superscriptSpan, 5, spannableString6.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
textView6.setText(spannableString6);
SpannableString spannableString7 = new SpannableString("为文字设置下标");
SubscriptSpan subscriptSpan = new SubscriptSpan();
spannableString7.setSpan(subscriptSpan, 5, spannableString7.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
textView7.setText(spannableString7);
SpannableString spannableString8 = new SpannableString("在文本中添加表情(表情)");
Drawable drawable = ContextCompat.getDrawable(this, R.mipmap.ic_launcher);
drawable.setBounds(0, 0, 42, 42);
ImageSpan imageSpan = new ImageSpan(drawable);
spannableString8.setSpan(imageSpan, 6, 8, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
textView8.setText(spannableString8);
SpannableString spannableString9 = new SpannableString("为文字设置点击事件");
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void updateDrawState(TextPaint ds) {
ds.setUnderlineText(false);//不显示下划线
}
@Override
public void onClick(View widget) {
Toast.makeText(SimpleSpannableActivity.this, "点击", Toast.LENGTH_SHORT).show();
}
};
spannableString9.setSpan(clickableSpan, 5, spannableString9.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
textView9.setMovementMethod(LinkMovementMethod.getInstance());//必须实现点击事件
textView9.setHighlightColor(Color.parseColor("#ff00ff00"));
// textView9.setHintTextColor(Color.parseColor("#ff00ff00"));
textView9.setText(spannableString9);
SpannableString spannableString10 = new SpannableString("为文字设置超链接");
URLSpan urlSpan = new URLSpan("http://www.baidu.com") {
@Override
public void onClick(View widget) {
super.onClick(widget);//可以重写URLSpan点击事件
}
};
spannableString10.setSpan(urlSpan, 5, spannableString10.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
textView10.setMovementMethod(LinkMovementMethod.getInstance());
textView10.setHighlightColor(Color.parseColor("#ff00ff00"));
textView10.setText(spannableString10);