前言:最近在項目學習的過程當中,發現SpannableStringBuilder類,而且該類能對TextView的內容進行自定義文字大小、顏色、加下劃線等功能,於是特意對該類的相關知識進行研究安全
SpannableString
、SpannableStringBuilder
與String
的關聯首先SpannableString
與SpannableStringBuilder
與String相似,也是用來存儲字符串,但它倆的特殊就在於SetSpan()
方法,能讓存儲在其中的String添加各類格式或者樣式(Span
),讓原來的String以不一樣的樣式顯式出來,如在原String
上加下劃線、加背景、改變字體顏色等等。markdown
SpannableString
、SpannableStringBuilder
區別由於SpannableString
和SpannableStringBuilder
的區別與String
和StringBuilder
相似,於是下表將四個類放在一塊兒進行對比app
表一:四個CharSequence的子類對比oop
類 | String | StringBuilder | SpannableString | SpannableStringBuilder |
---|---|---|---|---|
繼承接口 | CharSequence | CharSequence | CharSequence | CharSequence |
是否可變 | 不可變 | 可變 | 不可變 | 可變 |
是否線程安全 | 是 | 否 | 是 | 否 |
拼接append() |
否 | 是 | 否 | 是 |
SetSpan()
方法void setSpan(Object what, int start, int end, int flags)
學習
方法的做用:給SpannableString
或SpannableStringBuilder
特定範圍的字符串設定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