1. 程式人生 > >Android Span架構學習筆記

Android Span架構學習筆記

框架介紹

框架涉及到的類遵循以下四個定義規則:

  • 如果一個Span影響字元層次上的文字格式,那麼需要繼承CharacterStyle類。
  • 如果一個Span影響段落層次上的文字格式,那麼需要繼承ParagraphStyle介面。
  • 如果一個Span修改字元層次上的文字外觀,那麼需要繼承UpdateAppearance介面。
  • 如果一個Span修改字元層次上度量或者尺寸,那麼需要繼承UpdateLayout介面。

但是實際上我們往往繼承的是更加具體的類,而不是以上這些抽象類和介面。

型別介紹

下面是Android預設的一些Span的用法:

android.text.style.BulletSpan

該類影響段落層次的文字格式,可以讓你在段落前加一個小圓點。

BulletSpan span = new BulletSpan(15,Color.RED);
SpannableString spannableString = new SpannableString(CONTENT);
spannableString.setSpan(span,0,1,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mTvTextView.setText(spannableString);

這裡寫圖片描述

android.text.style.QuoteSpan

可以在段落前新增豎直的引用線。

QuoteSpan span = new QuoteSpan(Color.RED
); spannableString.setSpan(span,0,2,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

這裡寫圖片描述

android.text.style.AlignmentSpan

可以對文字對齊方式進行設定,有水平居中,左側對齊,右側對齊。

AlignmentSpan.Standard span = new AlignmentSpan.Standard(Layout.Alignment.ALIGN_CENTER);
spannableString.setSpan(span,0,0,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

這裡寫圖片描述

android.text.style.UnderlineSpan

它可以在文字下方新增下劃線。其內部實現其實就是使用Paint.setUnderlineText(true)實現的。

UnderlineSpan span = new UnderlineSpan();
spannableString.setSpan(span,0,spannableString.length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

這裡寫圖片描述

android.text.style.StrikethroughSpan

它允許你在文字上新增刪除線。它內部使用Paint.setStrikeThruText(true))來實現。

StrikethroughSpan span = new StrikethroughSpan();
spannableString.setSpan(span,0,spannableString.length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

這裡寫圖片描述

android.text.style.SubscriptSpan

文字作為下標進行顯示

SubscriptSpan span = new SubscriptSpan();
spannableString.setSpan(span,0,spannableString.length()/2,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

這裡寫圖片描述

android.text.style.SuperscriptSpan

同上,文字作為上標顯示

android.text.style.BackgroundColorSpan

你可以使用它設定文字的背景顏色

BackgroundColorSpan span = new BackgroundColorSpan(Color.RED);
spannableString.setSpan(span,0,spannableString.length()/2,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

這裡寫圖片描述

android.text.style.ForegroundColorSpan

同上,可以設定字型的顏色

android.text.style.ImageSpan

可以在文字中新增圖片

ImageSpan span = new ImageSpan(this,R.mipmap.ic_launcher);
spannableString.setSpan(span,0,1,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

這裡寫圖片描述

android.text.style.StyleSpan

它允許你設定文字的型別(bold, italic, normal)

StyleSpan span = new StyleSpan(Typeface.BOLD);
spannableString.setSpan(span,0,spannableString.length()/2,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

這裡寫圖片描述

android.text.style.AbsoluteSizeSpan

它允許你設定文字的絕對字型大小。

AbsoluteSizeSpan span = new AbsoluteSizeSpan(24,true);
spannableString.setSpan(span,0,spannableString.length()/2,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

這裡寫圖片描述

android.text.style.RelativeSizeSpan

允許設定相對字型的大小。

傳入的引數為2.0f這樣的。

android.text.style.ScaleXSpan

可以在文字的X方向上進行縮放

ScaleXSpan span = new ScaleXSpan(2.0f);
spannableString.setSpan(span,0,spannableString.length()/2,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

這裡寫圖片描述

android.text.style.MaskFilterSpan

可以在文字上設定蒙版(android.graphics.MaskFilter)

//Blur a character
span = new MaskFilterSpan(new BlurMaskFilter(density*2, BlurMaskFilter.Blur.NORMAL));

//Emboss a character
span = new MaskFilterSpan(new EmbossMaskFilter(new float[] { 1, 1, 1 }, 0.4f, 6, 3.5f));

這裡寫圖片描述

這裡寫圖片描述