SpannableString和SpannableStringBuilder總結

前言:最近在項目學習的過程當中,發現SpannableStringBuilder類,而且該類能對TextView的內容進行自定義文字大小、顏色、加下劃線等功能,於是特意對該類的相關知識進行研究安全

1. SpannableStringSpannableStringBuilderString的關聯

首先SpannableStringSpannableStringBuilder與String相似,也是用來存儲字符串,但它倆的特殊就在於SetSpan()方法,能讓存儲在其中的String添加各類格式或者樣式(Span),讓原來的String以不一樣的樣式顯式出來,如在原String上加下劃線、加背景、改變字體顏色等等。markdown

2. SpannableStringSpannableStringBuilder區別

由於SpannableStringSpannableStringBuilder的區別與StringStringBuilder相似,於是下表將四個類放在一塊兒進行對比app

表一:四個CharSequence的子類對比oop

String StringBuilder SpannableString SpannableStringBuilder
繼承接口 CharSequence CharSequence CharSequence CharSequence
是否可變 不可變 可變 不可變 可變
是否線程安全
拼接append()

SpannableString與SpannableStringBuilder的聯繫

3. SetSpan()方法

void setSpan(Object what, int start, int end, int flags)學習

方法的做用:給SpannableStringSpannableStringBuilder特定範圍的字符串設定Span式樣,能夠設置多個(好比同時加下劃線和改變字體顏色等),Flags參數標識了當在所標記範圍前和標記範圍後緊貼着插入新字符時的動做,便是否對新插入的字符應用一樣的樣式。字體

setSpan()方法的參數 Object what int start int end int flags
含義 對應的各類Span 開始應用指定Span的位置,索引從0開始 結束應用指定Span的位置,特效不包括該位置 對標記範圍先後插入的字體是否使用新式樣
各參數的具體示例 val span = new ForegroundColorSpan(Color.BLUE);字體顏色 ———————— ———————— Spannable.SPAN_EXCLUSIVE_EXCLUSIVE:先後都不包括。即僅在指定範圍的先後插入新字符都不會應用新樣式
val span = new BackgroundColorSpan(Color.YELLOW);:字體背景顏色 Spannable.SPAN_EXCLUSIVE_INCLUSIVE:前面不包括,後面包括。即僅在指定範圍的後插入新字符時會應用新樣式
span = new AbsoluteSizeSpan(16);:字體大小 Spannable.SPAN_INCLUSIVE_EXCLUSIVE:前面包括,後面不包括
span = new StyleSpan(Typeface.BOLD_ITALIC);:字體粗體、斜體 Spannable.SPAN_INCLUSIVE_INCLUSIVE:先後面都包括
span = new StrikethroughSpan();:字體刪除線
span = new UnderlineSpan();:字體下劃線
span = new ImageSpan(Drawable對象, ImageSpan.ALIGN_BASELINE); :字體下劃線

參考資料: SpannableString與SpannableStringBuilder ui

圖片來源:String、SpannableString與SpannableStringBuilder卻別和使用()spa

相關文章
相關標籤/搜索