1. 程式人生 > >SpannableStringBuilder設定字串不同顏色和大小

SpannableStringBuilder設定字串不同顏色和大小

一、背景介紹

在開發中產品會提出各種文字顏色大小各不相同的文案拼接在一起,比如   ,可以看到‘馬上下單’文字大小較大、字型顏色黑色,而’(立享200元優惠)‘字型大小較小,字型顏色紅色。當然 我們可以用不同的多個TextView來實現,對於每個TextView設定不同的字型風格以滿足需求,但不好的地方顯而易見。

我們可以使用SpannableString、SpannableStringBuilder進行拼接實現需求,SpannableStringBuilder可以用來設定不同的Span,這些Span便是用於實現Rich Text,比如粗體,斜體,前景色,背景色,字型大小,字型風格等等

二、實現效果

  1. String beforeText = "馬上下單";  
  2. String afterText = "(立享200元優惠)";  
  3. int beforeColor = "#000000";      
  4. int afterColor = "#ff0000";  
  5. int beforeSize = 20;  
  6. int afterSize = 15;  
  7. SpannableStringBuilder builder = new SpannableStringBuilder(beforeText); //建立SpannableStringBuilder,並新增前面文案
  8. builder.setSpan(new
     ForegroundColorSpan(Color.parseColor(beforeColor)), 0, beforeText.length(), Spannable.SPAN_EXCLUSIVE_INCLUSIVE); //設定前面的字型顏色 
  9. builder.setSpan(new AbsoluteSizeSpan(beforeSize, true), 0, beforeText.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); //設定前面的字型大小
  10. builder.append(afterText); //追加後面文案
  11. builder.setSpan(new
     ForegroundColorSpan(Color.parseColor(afterColor)),beforeText.length(), builder.length(), Spannable.SPAN_EXCLUSIVE_INCLUSIVE); //設定後面的字型顏色
  12. builder.setSpan(new AbsoluteSizeSpan(afterSize, true), beforeText.length(), builder.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);//設定後面的字型大小
  13. tv.setText(builder);