Android EditText/TextView使用SpannableString顯示覆合文本

         在Android中EditText用於編輯文本,TextView用於顯示文本,但是有時候我們需要對其中的文本進行樣式等方面的設置。Android爲我們提供了SpannableString類來對指定文本進行處理。

1) ForegroundColorSpan        文本顏色

private void setForegroundColorSpan() {  
    SpannableString spanString = new SpannableString("前景色");  
    ForegroundColorSpan span = new ForegroundColorSpan(Color.BLUE);  
    spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
    tv.append(spanString);  
}  

2) BackgroundColorSpan 文本背景色 

private void setBackgroundColorSpan() {  
    SpannableString spanString = new SpannableString("背景色");  
    BackgroundColorSpan span = new BackgroundColorSpan(Color.YELLOW);  
    spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
    tv.append(spanString);  
} 

3) StyleSpan         字體樣式:粗體、斜體等

private void setStyleSpan() {  
    SpannableString spanString = new SpannableString("粗體斜體");  
    StyleSpan span = new StyleSpan(Typeface.BOLD_ITALIC);  
    spanString.setSpan(span, 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
    tv.append(spanString);  
}  

4) RelativeSizeSpan         相對大小

private void setRelativeFontSpan() {
	SpannableString spanString = new SpannableString("字體相對大小");
	spanString.setSpan(new RelativeSizeSpan(2.5f), 0, 6,Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
	tv.append(spanString);    
}

5) TypefaceSpan         文本字體

private void setTypefaceSpan() {
	SpannableString spanString = new SpannableString("文本字體");
	spanString.setSpan(new TypefaceSpan("monospace"), 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
	tv.append(spanText);
}


6) URLSpan 文本超鏈接

private void addUrlSpan() {  
    SpannableString spanString = new SpannableString("超鏈接");  
    URLSpan span = new URLSpan("http://www.baidu.com");  
    spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
    tv.append(spanString);  
}  


7) ImageSpan         圖片

private void addImageSpan() {  
    SpannableString spanString = new SpannableString(" ");  
    Drawable d = getResources().getDrawable(R.drawable.ic_launcher);  
    d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());  
    ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);  
    spanString.setSpan(span, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
    tv.append(spanString);  
} 

8) ClickableSpan                 文本有點擊事件

private TextView textView;
textView = (TextView)this.findViewById(R.id.textView);
String text = "顯示Activity";
SpannableString spannableString = new SpannableString(text);
spannableString.setSpan(new ClickableSpan() {
	@Override
	public void onClick(View widget) {
		Intent intent = new Intent(Main.this,OtherActivity.class);
		startActivity(intent);
	}
	// 表示點擊整個text的長度都有效觸發這個事件
}, 0, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(spannableString);
textView.setMovementMethod(LinkMovementMethod.getInstance());


9) UnderlineSpan         下劃線

private void addUnderLineSpan() {  
    SpannableString spanString = new SpannableString("下劃線");  
    UnderlineSpan span = new UnderlineSpan();  
    spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
    tv.append(spanString);  
} 

10) StrikethroughSpan         刪除線

private void addStrikeSpan() {  
    SpannableString spanString = new SpannableString("刪除線");  
    StrikethroughSpan span = new StrikethroughSpan();  
    spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
    tv.append(spanString);  
}  


11) SuggestionSpan 相當於佔位符

12) MaskFilterSpan 修飾效果,如模糊(BlurMaskFilter)、浮雕(EmbossMaskFilter)

13) RasterizerSpan         光柵效果

14) AbsoluteSizeSpan         絕對大小(文本字體)

private void setAbsoluteFontSpan() {
		SpannableString spannableString = new SpannableString("40號字體");
		AbsoluteSizeSpan absoluteSizeSpan = new AbsoluteSizeSpan(40);
		spannableString.setSpan(absoluteSizeSpan, 0, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
		editText.append(spannableString);
}

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

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

private void setTextAppearanceSpan() {
	SpannableString spanString = new SpannableString("文本外貌");
	TextAppearanceSpan textAppearanceSpan = new TextAppearanceSpan(this, android.R.style.TextAppearance_Medium);
	spanString.setSpan(textAppearanceSpan, 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
	tv.append(spanString);
}

發佈了44 篇原創文章 · 獲贊 12 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章