TextView相信大家都不陌生,在Android代碼中無處不在。正常的用法是一個TextView裡面隻有一種字型樣式,如果想設定花樣TextView,就需要用到SpannableString了。下面給大家介紹一個SpannableString的正常用法。
SpannableString關鍵的方法就兩個:
public void setSpan(Object what, int start, int end, int flags) {}
public void removeSpan(Object what) {}
remove方法相信大家都懂了,就是移除樣式。下面重點給大家分析一下setSpan方法。setSpan方法有四個參數:
Object what:指各種Span的類型,詳見下面說明。
int start:需要設定的文字的起始位置;
int end:需要設定的文字的結束位置;
int flag:這個參數主要是設定span的起始和結束位置包含或不包含的類型。主要有四種類型,詳見下面說明。
flag取值:
-
:前面包括,後面不包括,即在文本前插入新的文本會應用該樣式,而在文本後插入新文本不會應用該樣式;Spannable. SPAN_INCLUSIVE_EXCLUSIVE
-
:前面包括,後面包括,即在文本前插入新的文本會應用該樣式,而在文本後插入新文本也會應用該樣式;Spannable. SPAN_INCLUSIVE_INCLUSIVE
-
:前面不包括,後面不包括,同上;Spannable. SPAN_EXCLUSIVE_EXCLUSIVE
-
:前面不包括,後面包括,同上。Spannable. SPAN_EXCLUSIVE_INCLUSIVE
what常用取值:
-
: 文本背景色BackgroundColorSpan
-
: 文本顔色ForegroundColorSpan
-
: 修飾效果,如模糊(BlurMaskFilter)浮雕MaskFilterSpan
-
: 光栅效果RasterizerSpan
-
: 删除線StrikethroughSpan
-
: 相當于占位符SuggestionSpan
-
: 下劃線UnderlineSpan
-
: 文本字型(絕對大小),這裡有兩個參數 (int size, boolean dip),size:預設機關為px。 dip:true為size的機關是dip,false為px。AbsoluteSizeSpan
-
: 設定圖檔,基于文本基線或底部對齊。DynamicDrawableSpan
-
: 圖檔ImageSpan
-
: 相對大小(文本字型)RelativeSizeSpan
-
: 基于x軸縮放ScaleXSpan
-
: 字型樣式:粗體、斜體等StyleSpan
-
: 下标(數學公式會用到)SubscriptSpan
-
: 上标(數學公式會用到)SuperscriptSpan
-
: 文本外貌(包括字型、大小、樣式和顔色)TextAppearanceSpan
-
: 文本字型TypefaceSpan
-
: 文本超連結URLSpan
-
: 點選事件 在設定ClickableSpan的時候千萬别忘了setMovementMethod。ClickableSpan
關于what參數的更詳細用法可以參考:https://blog.csdn.net/qq_16430735/article/details/50427978
下面貼出簡單應用代碼:
Spannable spannable = new SpannableString("SpanableString設定不同字型樣式神器");
spannable.setSpan(new StyleSpan(Typeface.BOLD), 0, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannable.setSpan(new AbsoluteSizeSpan(15,true),3,8,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textview.setText(spannable);
最後,分享一個小經驗:
之前在封裝自定義元件的時候,總會把設定文字的方法寫成setContent(String content);參數類型為String,導緻後面想修改一下text文字的不同樣式都比較麻煩。
我們們可以改成setContent(CharSequence content),參數類型為CharSequence,我們就可以直接傳SpannableString或者String了。這樣擴充性就好很多了。