TextView是Android開發中一種很常用的控件,經常用來展示文字內容。但有的時候爲了帶來更好的用戶體驗,往往需要很炫的樣式,如果只是通過使用多個TextView進行堆疊未免過於繁瑣,因此我們使用SpannableString對於TextView進行設置。
1.普通的TextView
<TextView
android:textSize="25dp"
android:id="@+id/text"
android:text="http://blog.csdn.net/steveyg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"/>
然後在Activity中對空間進行綁定 setContentView(R.layout.activity_main);
TextView tv = (TextView)findViewById(R.id.text);
最後的樣式如下圖所示2.構建SpannableString
當我們希望使用SpannableString設置字符串樣式時,一般需要先創建一個SpannableString對象SpannableString spanText = new SpannableString("http://blog.csdn.net/steveyg");
然後調用setSpan方法對於樣式進行設置spanText.setSpan(new BackgroundColorSpan(Color.BLUE), 0, spanText.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
我們可以看到這個方法裏面共有四個參數,第一個參數是用來指定實現某種效果(比如背景色,超鏈接等),第二個和第三個參數表示其實的位置和結束的位置,而第四個參數表示實現的類型,可以在Spanned.java中看到全部的類型,常用的有如下四種:- SPAN_EXCLUSIVE_EXCLUSIVE 不包含起點和終點
- SPAN_EXCLUSIVE_INCLUSIVE 不包含起點但包含終點
- SPAN_INCLUSIVE_EXCLUSIVE 包含起點但不包含終點
- SPAN_INCLUSIVE_INCLUSIVE· 包含起點和終點
3.背景色
spanText.setSpan(new BackgroundColorSpan(Color.BLUE), 4, spanText.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
4.前景色
spanText.setSpan(new ForegroundColorSpan(Color.BLUE) , 0, spanText.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
5.中劃線
spanText.setSpan(new StrikethroughSpan(), 0, spanText.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
6.下劃線
7.設置字號大小
spanText.setSpan(new AbsoluteSizeSpan(40, true), 0,4, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
spanText.setSpan(new RelativeSizeSpan(2.5f), 0,4, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
8.設置圖片
DynamicDrawableSpan drawableSpan =
new DynamicDrawableSpan(DynamicDrawableSpan.ALIGN_BASELINE) {
@Override
public Drawable getDrawable() {
Drawable d = getResources().getDrawable(R.mipmap.ic_launcher);
d.setBounds(0, 0, 50, 50);
return d;
}
};
Drawable d = getResources().getDrawable(R.mipmap.ic_launcher);
d.setBounds(0, 0, 50, 50);
spanText.setSpan(new ImageSpan(d), 0,1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
9.水平縮放
spanText.setSpan(new ScaleXSpan(2.5f), 0,5, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
10.改變字體樣式
spanText.setSpan(new StyleSpan(Typeface.ITALIC), 0,5, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
11.上下角標
spanText.setSpan(new SubscriptSpan(), 0,1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
12.修改字體
spanText.setSpan(new TypefaceSpan("monospace"), 0,5, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
13.超鏈接
spanText.setSpan(new URLSpan("http://blog.csdn.net/steveyg"), 0,5, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
tv.setText(spanText);
tv.setMovementMethod(new LinkMovementMethod());//點擊事件