android-tip-關於SpannableString的使用

若是想 單獨設置TextView上其中幾個字的樣式 ,該怎麼辦?
答案是使用SpannableString。
使用SpannableString能夠爲TextView上的某字或某些字設置:
前景色( ForegroundColorSpan)
背景色(BackgroundColorSpan)、
設置字體(TypefaceSpan)、
點擊事件(ClickableSpan)、
設置掩碼(MaskFilterSpan)、
刪除線效果(StrikethroughSpan)、
下劃線效果( UnderlineSpan)、
插入圖片( ImageSpan)等
想要實現自定義的樣式,查看這個文檔:
1. 簡單示例
設置文字的前景色

 1 SpannableString name = new SpannableString("abc");html

2 ForegroundColorSpan nameSpan =  new ForegroundColorSpan(Color.BLUE);
3 name.setSpan(nameSpan, 0, name.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
4 textView.setText(name);
2. 使用SpannableStringBuilder構造複雜的樣式
例如,咱們寫一個聊天程序,須要將用戶名設置成綠色,將聊天內容設置成紅色,能夠這麼幹:
 1 SpannableStringBuilder spanBuilder =  new SpannableStringBuilder();
 2  //  name
 3  SpannableString name =  new SpannableString("name");
 4 ForegroundColorSpan nameSpan =  new ForegroundColorSpan(Color.BLUE);
 5 name.setSpan(nameSpan, 0, name.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
 6 spanBuilder.append(name);
 7 
 8  //  msg
 9  SpannableString msg =  new SpannableString("msg");
10 ForegroundColorSpan msgSpan =  new ForegroundColorSpan(Color.RED);
11 msg.setSpan(msgSpan, 0, msg.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
12 spanBuilder.append(msg);
13 

14 textView.setText(spanBuilder); android

3. 插入圖片
  
  
  
  
1  //  image
2  SpannableString image =  new SpannableString("image");
3 ImageSpan imageSpan =  new ImageSpan(ctx, imageResourceId, DynamicDrawableSpan.ALIGN_BASELINE);
4 image.setSpan(imageSpan, 0, image.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
5 
6 textView.setText(image);
4. 爲文字設置點擊事件
若是咱們須要問某個字或某幾個字設置點擊事件,能夠這麼幹:
 1  //  name
 2  ClickableSpan clickSpan =  new ClickableSpan() {
 3 
 4 @Override
 5   public  void onClick(View widget) {
 6     Toast.makeText(context, "clickspan",  Toast.LENGTH_LONG).show();
 7  }
 8  @Override
 9   public  void updateDrawState(TextPaint ds) {
10     super.updateDrawState(ds);
11     //   去掉下劃線
12     ds.setUnderlineText( false);
13 
14     //   設置文字顏色
15     ds.setColor(Color.BLUE);
16  }
17 };
18 
19 SpannableString name =  new SpannableString(cmd.srcName() + ":");
20 name.setSpan(clickSpan, 0, name.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
21 

22 textView.setText(name); app

注意默認狀態下,TextView不會響應點擊事件,還須要這麼設置一下:
  
  
  
  
1 txtView.setMovementMethod(LinkMovementMethod.getInstance());
相關文章
相關標籤/搜索