個人學習筆記整理
用處
動態給一段文本內容設置不同的樣式?比如背景顏色,字體顏色,字體大小等等,在一些特殊的需求下,還是比較實用。
SpannableString 和 SpannableStringBuilder 類似 String 和 StringBuilder,前者不可變,後者可動態添加。二者在使用方法上類似。
主要方法
public void setSpan(Object what, int start, int end, int flags) {}
參數說明:
- what : 核心,不同的span對應不同的樣式,具體如下
Span | 樣式 |
---|---|
ForegroundColorSpan | 設置文本字體顏色 |
BackgroundColorSpan | 設置背景顏色 |
AbsoluteSizeSpan | 設置絕對的文字大小(單位px) |
ClickableSpan | 爲文字添加點擊事件 |
DynamicDrawableSpan | 設置圖片,基於文本基線或底部對齊 |
ImageSpan | 爲文本添加圖片 |
RelativeSizeSpan | 設置相對文字大小,設置倍數,相對於其他文字的大小 |
StrikethroughSpan | 添加刪除線 |
SubscriptSpan | 設置下標文字 |
SuperscriptSpan | 設置上標文字 |
URLSpan | 文字設定超鏈接 |
UnderlineSpan | 設置下劃線 |
- start : 樣式開始生效位置,包括該位置
- end : 樣式結束的位置,不包括該位置
- flags : 標識在 Span 範圍內的文本前後輸入新的字符時是否把它們也應用這個效果
flags | 作用 |
---|---|
Spannable.SPAN_EXCLUSIVE_INCLUSIVE | 在 Span前面輸入的字符不應用 span 的效果,在後面輸入的字符應用Span效果。 |
Spannable.SPAN_INCLUSIVE_EXCLUSIVE | 在 Span前面輸入的字符應用 span 的效果,在後面輸入的字符不應用Span效果。 |
Spannable.SPAN_INCUJSIVE_INCLUSIVE | 在 Span前後輸入的字符都應用 span 的效果。 |
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE | 在 Span前後輸入的字符前後都不應用 span 的效果。 |
具體效果
對比可以看出,EditText 中的文本樣式在不同的flags區別,對照作用,還是比較清晰。