Android 強大的spannableStringBuilder

SpannableStringBuilder介紹:

         This is the class for text whose content and markup can both be changed.
        (這是一個內容和標記都可以更改的文本類)

通俗一點理解就是一個富文本字符串,可以改變字符串長度,也可以通過設置字符串中某些字段的背景顏色,樣式等等

SpannableStringBuilderSpannableString的區別類似與StringBuilderString,就是SpannableStringBuilder可以拼接,而SpannableString不可拼接,並且他們都繼承了CharSequence,因此,他們可以直接在TextViewsetText中使用

主要方法:

SpannableStringBuilderSpannableString主要通過使用setSpan(Object what, int start, int end, int flags)改變文本樣式。
對應的參數:

  • start: 指定Span的開始位置

  • end: 指定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:前後都不包括。

  • what: 對應的各種Span,不同的Span對應不同的樣式。已知的可用類有:

    • BackgroundColorSpan : 文本背景色

    • ForegroundColorSpan : 文本顏色

    • MaskFilterSpan : 修飾效果,如模糊(BlurMaskFilter)浮雕

    • RasterizerSpan : 光柵效果

    • StrikethroughSpan : 刪除線

    • SuggestionSpan : 相當於佔位符

    • UnderlineSpan : 下劃線

    • AbsoluteSizeSpan : 文本字體(絕對大小)

    • DynamicDrawableSpan : 設置圖片,基於文本基線或底部對齊。

    • ImageSpan : 圖片

    • RelativeSizeSpan : 相對大小(文本字體)

    • ScaleXSpan : 基於x軸縮放

    • StyleSpan : 字體樣式:粗體、斜體等

    • SubscriptSpan : 下標(數學公式會用到)

    • SuperscriptSpan : 上標(數學公式會用到)

    • TextAppearanceSpan : 文本外貌(包括字體、大小、樣式和顏色)

    • TypefaceSpan : 文本字體

    • URLSpan : 文本超鏈接

    • ClickableSpan : 點擊事件

簡單用法:

 SpannableString ss = new SpannableString("這是什麼我剛知道,什麼也沒說,啥都亂,一片亂哄哄的圖片:."); 
         //用顏色標記文本
         ss.setSpan(new ForegroundColorSpan(Color.RED), 0, 3, 
                 //setSpan時需要指定的 flag,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE(前後都不包括).
                 Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
         //用超鏈接標記文本
         ss.setSpan(new URLSpan("tel:1233558712"), 3, 6, 
                 Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
         //用樣式標記文本(斜體)
         ss.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), 6, 9, 
                 Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
         //用刪除線標記文本
         ss.setSpan(new StrikethroughSpan(), 9, 18, 
                 Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
         //用下劃線標記文本
         ss.setSpan(new UnderlineSpan(), 18, 29, 
                 Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

   總體來說,掌握住了使用方法,可以在一個TextView中直接一段顯示出來了,就現在去試試吧~~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章