Android Span架構學習筆記
阿新 • • 發佈:2019-01-04
框架介紹
框架涉及到的類遵循以下四個定義規則:
- 如果一個
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));