SpannableString可以在TextView或者EditText中设置字体、大小、颜色、样式、上下标、删除线、下划线、超链接、点击事件等。


用法如下:

//初始化SpannableStringSpannableStringss=newSpannableString("将要处理的文字");//使用SpannableString的setSpan()方法,设置SpannableString要显示的形式ss.setSpan(Objectwhat,intstart,intend,intflags);//把SpannableString赋值给TextviewtextView.setText(ss);



其中,flags的含义略提一下:

Spanned.SPAN_EXCLUSIVE_EXCLUSIVE//前后插入的内容都不会跟着样式改变;Spanned.SPAN_INCLUSIVE_EXCLUSIVE//前面插入的内容会跟着样式改变,后面不会;Spanned.SPAN_EXCLUSIVE_INCLUSIVE//前面插入的内容不会跟着样式改变,后面会跟着改变;Spanned.SPAN_INCLUSIVE_INCLUSIVE//前后插入的内容都会跟着样式改变;


使用的时候,根据具体情况选择(TextView时都一样)


很明显start和end就是要设置的文字的开始和结束的索引,注意这里的开始和和结束也是包含头不包含尾的;


剩下的就是这个Object的what了,SpannableString要显示成什么样子,就看他了;

//设置字体publicTypefaceSpan(Stringfamily)//family为字体,如"monospace"、"serif"、"sans-serif"等//设置字体大小publicAbsoluteSizeSpan(intsize)//size单位为pxpublicAbsoluteSizeSpan(intsize,booleandip)//dip单位是否为dip,false为pxpublicRelativeSizeSpan(floatproportion)//proportion为正常字号的倍数,如0.5f即正常字号的0.5倍publicScaleXSpan(floatproportion)//proportion为正常字号宽度的倍数,如3.0f即正常字号宽度的3倍//设置字体颜色publicForegroundColorSpan(intcolor)//color为颜色值,如Color.RED或Color.parseColor("#000000")等//设置字体背景颜色publicBackgroundColorSpan(intcolor)//color为颜色值,如Color.RED或Color.parseColor("#000000")等//设置字体样式publicStyleSpan(intstyle)//style为具体样式的常量值://android.graphics.Typeface.BOLD//粗体//android.graphics.Typeface.BOLD_ITALIC//粗体+斜体//android.graphics.Typeface.ITALIC//斜体//android.graphics.Typeface.NORMAL//正常//设置上标publicSuperscriptSpan()//设置下标publicSubscriptSpan()//设置下划线publicUnderlineSpan()//设置删除线publicStrikethroughSpan()//设置超链接,需要textView.setMovementMethod(LinkMovementMethod.getInstance())才能生效publicURLSpan(Stringurl)//url为URI,如"http://wjyzxc.blog.51cto.com/5725897/1637082"、"tel:10010"、"mailto:lfe99@vip.qq.com"或"sms:10010"等//自定义点击事件//继承ClickableSpan,在publicvoidonClick(Viewv)方法中写点击事件//实现点击事件的同时,还可以重写publicvoidupdateDrawState(TextPaintds):@OverridepublicvoidupdateDrawState(TextPaintds){ds.setColor(Color.RED);//字体颜色ds.setUnderlineText(true);//是否有下划线}//设置图片publicImageSpan(Contextcontext,Bitmapb)//还有Drawable等重载方法//设置字体,样式,大小、颜色等publicTextAppearanceSpan(Stringfamily,intstyle,intsize,ColorStateListcolor,ColorStateListlinkColor)//设置项目符号publicBulletSpan()

例:

ss.setSpan(newUnderlineSpan(),2,5,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);ss.setSpan(newSuperscriptSpan(),4,5,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);