示例:
簡單來說就是可以在一個TextView中的部分文字實現(xiàn)點擊事件,更換顏色庭惜,添加圖片什么的罩驻,在這之前參考了這個: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()函數(shù)鉴腻,可以給存儲的String添加不同的樣式。如加下劃線百揭、背景色爽哎、字體顏色、字體大小等器一。
另外需要注意的是课锌,當SpannableStringBuilder中存儲了一個有樣式的String,當把spannableStringBuilder展示在TextView祈秕、EditTextView中時渺贤,能顯示這些樣式;當展示在canvas上時请毛,因為Canvas不支持SpannableStringBuilder的額外信息志鞍,所以會退化成一個普通的String,不顯示樣式信息。
setSpan()函數(shù)
void setSpan(Object what,int startIndex,int endIndex,int flag);
說明:
參數(shù) 說明
Object what 設(shè)置Span樣式
int startIndex 樣式開始的Index
int endIndex 樣式結(jié)束的Index
int flag 新插入字符的樣式設(shè)置
注意點:
endIndex:字體樣式結(jié)束的Index方仿,該Index對應(yīng)的字符不使用樣式固棚,比如有一個字符串為s = “abcd”,s.setSpan(span,0,2,flag),此時第0仙蚜、1個字符ab使用了樣式span此洲,endIndex對應(yīng)的字符c不使用。
flag:取值如下
取值 說明
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE 前后都不包括委粉,即在指定范圍的前面和后面插入新字符都不會應(yīng)用新樣式
Spannable.SPAN_EXCLUSIVE_INCLUSIVE 前面不包括呜师,后面包括。即僅在范圍字符的后面插入新字符時會應(yīng)用新樣式
Spannable.SPAN_INCLUSIVE_EXCLUSIVE 前面包括贾节,后面不包括汁汗。
Spannable.SPAN_INCLUSIVE_INCLUSIVE 前后都包括
簡單示例
//設(shè)置字體顏色
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) {
//設(shè)置一些樣式
//ds.setUnderlineText(false);
//ds.setColor(color);
}
}, startIndex, endIndex,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
);
附上自己當時寫的一個頁面Demo 自用
http://download.csdn.net/detail/u014748864/9800224