示例:
123.png
简单来说就是可以在一个TextView中的部分文字实现点击事件,更换颜色,添加图片什么的,在这之前参考了这个:http://blog.coryphaei.com/2016/01/11/%E4%B8%80%E4%B8%AA%E7%AE%80%E5%8D%95%E7%9A%84Android%E5%AF%8C%E6%96%87%E6%9C%ACTextView%E5%AE%9E%E7%8E%B0/
SpannableStringBuilder:
基本概念
SpannableStringBuilder 和 StringBuilder类似,都可以存储字符串,不同的是SpannableStringBuilder有一个setSpan()函数,可以给存储的String添加不同的样式。如加下划线、背景色、字体颜色、字体大小等。
另外需要注意的是,当SpannableStringBuilder中存储了一个有样式的String,当把spannableStringBuilder展示在TextView、EditTextView中时,能显示这些样式;当展示在canvas上时,因为Canvas不支持SpannableStringBuilder的额外信息,所以会退化成一个普通的String,不显示样式信息。
setSpan()函数
void setSpan(Object what,int startIndex,int endIndex,int flag);
说明:
参数 说明
Object what 设置Span样式
int startIndex 样式开始的Index
int endIndex 样式结束的Index
int flag 新插入字符的样式设置
注意点:
endIndex:字体样式结束的Index,该Index对应的字符不使用样式,比如有一个字符串为s = “abcd”,s.setSpan(span,0,2,flag),此时第0、1个字符ab使用了样式span,endIndex对应的字符c不使用。
flag:取值如下
取值 说明
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE 前后都不包括,即在指定范围的前面和后面插入新字符都不会应用新样式
Spannable.SPAN_EXCLUSIVE_INCLUSIVE 前面不包括,后面包括。即仅在范围字符的后面插入新字符时会应用新样式
Spannable.SPAN_INCLUSIVE_EXCLUSIVE 前面包括,后面不包括。
Spannable.SPAN_INCLUSIVE_INCLUSIVE 前后都包括
简单示例
//设置字体颜色
textview1 = (TextView) findViewById(R.id.text1);
SpannableStringBuilder spannableStringBuilder1 = new SpannableStringBuilder("Android");
ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(Color.BLUE);
spannableStringBuilder1.setSpan(foregroundColorSpan, 0, 3, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
textview1.setText(spannableStringBuilder1);
点击事件
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder("Android");
spannableStringBuilder.setSpan(
new ClickableSpan() {
@Override
public void onClick(View widget) {
//do something
}
@Override
public void updateDrawState(TextPaint ds) {
//设置一些样式
//ds.setUnderlineText(false);
//ds.setColor(color);
}
}, startIndex, endIndex,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
);
附上自己当时写的一个页面Demo 自用
http://download.csdn.net/detail/u014748864/9800224
网友评论