Android佈局中動態修改TextView等控制元件中文字的顏色
阿新 • • 發佈:2018-12-30
在Android介面展示資訊時,有時我們需要相近或相鄰的文字顯示不同的文字格式,這時該怎麼辦呢?我們有至少兩種辦法:
- 新增多個控制元件
- 在控制元件修改區域性文字
今天我們來談一下如何在控制元件中修改區域性文字。
1、SpannableStringBuilder類
我們要用到SpannableStringBuilder這個類,這是一個內容和標記都可以更改的文字類,它與SpannableString的關係類似於StringBuilder和String的關係,比如前者可以利用append方法去動態改變相應物件的內容。
2、Span方法
SpannableStringBuilder的setSpan()方法:
void setSpan(Object what,int start,int end,int flags)
函式作用:可以給SpannableStringBuilder設定特殊的文字樣式,比如文字顏色、背景顏色、超連結、樣式、刪除線、下劃線等。
引數說明:
第一個引數what:樣式span (測量 測繪)
第二、第三個引數start-end:樣式改變的起始和終止索引(從0開始)。需要注意的是1,3表示的是[1,3)的意思,即從索引1開始,在索引3之前停止
第四個引數flags:是否影響前後插入的文字,EXCLUSIVE和INCLUSIVE分別表示不影響和影響,兩兩組合可以形成4種引數,分別為:
- Spannable.SPAN_EXCLUSIVE_EXCLUSIVE 前後均無影響
- Spannable.SPAN_EXCLUSIVE_INCLUSIVE 只後影響
- Spannable.SPAN_INCLUSIVE_EXCLUSIVE 只前影響
- Spannable.SPAN_INCLUSIVE_INCLUSIVE 前後均影響
3、舉例說明
SpannableStringBuilder builder
//設定文字顏色Span
ForegroundColorSpan Span1 = new ForegroundColorSpan(Color.RED);
//設定背景顏色Span
BackgroundColorSpan Span2 = new BackgroundColorSpan(Color.YELLOW );
//設定超連結Span
URLSpan Span3 = new URLSpan("wwww.baidu.com");
//設定文字樣式之字型Span
AbsoluteSizeSpan Span4 = new AbsoluteSizeSpan(80);
//設定刪除線Span
StrikethroughSpan Span5 = new StrikethroughSpan();
//設定下劃線Span
UnderlineSpan Span6 = new UnderlineSpan();
builder.setSpan(Span1,0,1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.setSpan (Span2,1,2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.setSpan(Span3,2,3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.setSpan(Span4,3,4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.setSpan(Span5,4,5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.setSpan(Span6,5,6, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mTextView.setText(builder);
效果圖如下:
當然,還有更多可選的Span型別,具體的大家參考官方API吧~