Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android Span 架構介紹

Android Span 架構介紹

編輯:關於Android編程

?前幾天在微博上看到一個人評論Android Span機制相當強大,有必要細心研究一下,於是就google了一下,發現了一篇很好的文章Spans, a Powerful Concept.,然後以這篇文章為基礎研究了一下Android Span的用法。於是決定寫幾篇文章來總結一下。

Android Span 介紹

?對於Span,大家首先想起的應用場景就是同一個TextView中顯示不同顏色的字體。對於這種需求,我們會用到ForegroundColorSpan

ForegroundColorSpan span = new ForegroundColorSpan(Color.RED);
SpannableString spannableString = new SpannableString(CONTENT);
spannableString.setSpan(span,0,spannableString.length()/2,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mTvTextView.setText(spannableString);

?上面這段代碼可能就是大家對Android Span的全部了解了,但是Android Span有著和Drawable同樣強大的能力,希望我的這幾篇文章可以帶領大家初探Android Span的強大能力。

Android Span 框架

?Android Span 框架涉及的類遵循一下四個定義規則:

如果一個Span影響字符層次上的文字格式,那麼它繼承CharacterStyle類。 如果一個Span影響段落層次上的文字格式,那麼它實現ParagraphStyle接口。 如果一個Span修改字符層次上的文字外觀,那麼它實現UpdateAppearance接口。 如果一個Span修改字符層次上的度量或者尺寸,那麼它實現UpdateLayout接口。
?雖然有以上四個規則,但是我們自定義Span時並不需要直接繼承或者實現這些類或者接口,而是實現其他更加具體的類。

?遵循這些規則,Android Span框架相關類圖如下:

 

CharacterStyle相關類圖

 

 

ParagraphStyle相關類圖

 

 

UpdateAppearance相關類圖

 

 

UpdateLayout相關類圖

Android Span類型介紹

?Android Span的相關原理和機制以後再講,我們先來了解一下當前Android預設的Span類型的用法吧。

 android.text.style.BulletSpan

?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);
BulletSpan效果圖

 android.text.style.QuoteSpan

?QuoteSpan影響段落層次文字的格式,它可以在段落前邊添加一個豎直的引用線。

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

QuoteSpan效果圖

 android.text.style.AlignmentSpan

?AlignSpan.Standard影響段落層次文字的格式,它允許你控制段落的對齊方式,有居中對齊,右側對齊和左側對齊。

AlignmentSpan.Standard span = new AlignmentSpan.Standard(Layout.Alignment.ALIGN_CENTER);
SpannableString spannableString = new SpannableString(CONTENT);
spannableString.setSpan(span,0,0,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mTvTextView.setText(spannableString);
AlignSpan效果圖

 android.text.style.UnderlineSpan

?UnderlineSpan影響字符層次文字的格式,它可以在文字下方添加下劃線。其內部實現其實就是使用Paint.setUnderlineText(true)實現的。

UnderlineSpan span = new UnderlineSpan();
SpannableString spannableString = new SpannableString(CONTENT);
spannableString.setSpan(span,0,spannableString.length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mTvTextView.setText(spannableString);
UnderlineSpan效果圖

 android.text.style.StrikethroughSpan

?StrikethroughSpan影響字符層次上的文字的格式,它允許你在文字上添加刪除線。它內部使用Paint.setStrikeThruText(true))來實現。

StrikethroughSpan span = new StrikethroughSpan();
SpannableString spannableString = new SpannableString(CONTENT);
spannableString.setSpan(span,0,spannableString.length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mTvTextView.setText(spannableString);

StrikethroughSpan效果圖

 android.text.style.SubscriptSpan

?SubscriptSpan影響字符層次上的文字的格式,它允許你把文字作為下標進行顯示。

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

SubscriptSpan效果圖

 android.text.style.SuperscriptSpan

?“影響字符層次上的文字的格式,它允許你把文字作為上標進行顯示。

SuperscriptSpan span = new SuperscriptSpan();
SpannableString spannableString = new SpannableString(CONTENT);
spannableString.setSpan(span,0,spannableString.length()/2,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mTvTextView.setText(spannableString);

SuperscriptSpan效果圖

 android.text.style.BackgroundColorSpan

?BackgroundColorSpan影響字符層次上的文字的格式,你可以使用它設置文字的背景顏色。

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

BackgroundColorSpan效果圖

 android.text.style.ForegroundColorSpan

?ForegroundColorSpan影響字符層次上的文字的格式,你可以使用它設置文字的自己的顏色。

ForegroundColorSpan span = new ForegroundColorSpan(Color.RED);
SpannableString spannableString = new SpannableString(CONTENT);
spannableString.setSpan(span,0,spannableString.length()/2,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mTvTextView.setText(spannableString);

ForegroundColorSpan效果圖

 android.text.style.ImageSpan

?ImageSpan影響字符層次上的文字的格式,你可以使用它在文字中間添加圖片。

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

ImageSpan效果圖

 android.text.style.StyleSpan

?StyleSpan影響字符層次上的文字的格式。它允許你設置文字的類型(bold, italic, normal)

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

StyleSpan效果圖

 android.text.style.TypefaceSpan

?TypefaceSpan影響字符層次上的文字的格式。它允許你設置文字的字體族(monospace, serif等)

TypefaceSpan span = new TypefaceSpan("serif");
SpannableString spannableString = new SpannableString(CONTENT);
spannableString.setSpan(span,0,spannableString.length()/2,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mTvTextView.setText(spannableString);

TypefaceSpan效果圖

 android.text.style.AbsoluteSizeSpan

?AbsoluteSizeSpan影響字符層次上的文字的格式。它允許你設置文字的絕對字體大小。

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

AbsoluteSizeSpan效果圖

 android.text.style.RelativeSizeSpan

?RelativeSizeSpan影響字符層次上的文字的格式。它允許你設置文字的相對字體大小。

RelativeSizeSpan span = new RelativeSizeSpan(2.0f);
SpannableString spannableString = new SpannableString(CONTENT);
spannableString.setSpan(span,0,spannableString.length()/2,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mTvTextView.setText(spannableString);

RelativeSizeSpan效果圖

 android.text.style.ScaleXSpan

 ScaleXSpan`影響字符層次上的文字的格式。它讓你讓文字在x方向上進行縮放。

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

ScaleXSpan效果圖

 android.text.style.MaskFilterSpan

?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));

BlurMaskFilter效果圖

EmbossMaskFilter效果圖

後記

?本篇文章只是簡單介紹Android Span的使用,接下來的文章會介紹Span更加高級的用法和它的原理。希望大家繼續支持。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved