Android EditText/TextView使用SpannableString显示复合文本

来源:互联网 发布:sql 替换指定位置字符 编辑:程序博客网 时间:2024/05/16 04:32

在Android中EditText用于编辑文本,TextView用于显示文本,但是有时候我们需要对其中的文本进行样式等方面的设置。Android为我们提供了SpannableString类来对指定文本进行处理。

1) ForegroundColorSpan        文本颜色

[java] view plaincopyprint?
  1. private void setForegroundColorSpan() {    
  2.     SpannableString spanString = new SpannableString("前景色");    
  3.     ForegroundColorSpan span = new ForegroundColorSpan(Color.BLUE);    
  4.     spanString.setSpan(span, 03, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    
  5.     tv.append(spanString);    
  6. }    

2) BackgroundColorSpan 文本背景色 

[java] view plaincopyprint?
  1. private void setBackgroundColorSpan() {    
  2.     SpannableString spanString = new SpannableString("背景色");    
  3.     BackgroundColorSpan span = new BackgroundColorSpan(Color.YELLOW);    
  4.     spanString.setSpan(span, 03, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    
  5.     tv.append(spanString);    
  6. }   

3) StyleSpan         字体样式:粗体、斜体等

[java] view plaincopyprint?
  1. private void setStyleSpan() {    
  2.     SpannableString spanString = new SpannableString("粗体斜体");    
  3.     StyleSpan span = new StyleSpan(Typeface.BOLD_ITALIC);    
  4.     spanString.setSpan(span, 04, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    
  5.     tv.append(spanString);    
  6. }    

4) RelativeSizeSpan         相对大小

[java] view plaincopyprint?
  1. private void setRelativeFontSpan() {  
  2.     SpannableString spanString = new SpannableString("字体相对大小");  
  3.     spanString.setSpan(new RelativeSizeSpan(2.5f), 06,Spannable.SPAN_INCLUSIVE_EXCLUSIVE);  
  4.     tv.append(spanString);      
  5. }  

5) TypefaceSpan         文本字体

[html] view plaincopyprint?
  1. private void setTypefaceSpan() {  
  2.     SpannableString spanString = new SpannableString("文本字体");  
  3.     spanString.setSpan(new TypefaceSpan("monospace"), 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
  4.     tv.append(spanText);  
  5. }  


6) URLSpan 文本超链接

[java] view plaincopyprint?
  1. private void addUrlSpan() {    
  2.     SpannableString spanString = new SpannableString("超链接");    
  3.     URLSpan span = new URLSpan("http://www.baidu.com");    
  4.     spanString.setSpan(span, 03, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    
  5.     tv.append(spanString);    
  6. }    


7) ImageSpan         图片

[html] view plaincopyprint?
  1. private void addImageSpan() {    
  2.     SpannableString spanString = new SpannableString(" ");    
  3.     Drawable d = getResources().getDrawable(R.drawable.ic_launcher);    
  4.     d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());    
  5.     ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);    
  6.     spanString.setSpan(span, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    
  7.     tv.append(spanString);    
  8. }   

8) ClickableSpan                 文本有点击事件

[html] view plaincopyprint?
  1. private TextView textView;  
  2. textView = (TextView)this.findViewById(R.id.textView);  
  3. String text = "显示Activity";  
  4. SpannableString spannableString = new SpannableString(text);  
  5. spannableString.setSpan(new ClickableSpan() {  
  6.     @Override  
  7.     public void onClick(View widget) {  
  8.         Intent intent = new Intent(Main.this,OtherActivity.class);  
  9.         startActivity(intent);  
  10.     }  
  11.     // 表示点击整个text的长度都有效触发这个事件  
  12. }, 0, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
  13. textView.setText(spannableString);  
  14. textView.setMovementMethod(LinkMovementMethod.getInstance());  


9) UnderlineSpan         下划线

[html] view plaincopyprint?
  1. private void addUnderLineSpan() {    
  2.     SpannableString spanString = new SpannableString("下划线");    
  3.     UnderlineSpan span = new UnderlineSpan();    
  4.     spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    
  5.     tv.append(spanString);    
  6. }   

10) StrikethroughSpan         删除线

[html] view plaincopyprint?
  1. private void addStrikeSpan() {    
  2.     SpannableString spanString = new SpannableString("删除线");    
  3.     StrikethroughSpan span = new StrikethroughSpan();    
  4.     spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    
  5.     tv.append(spanString);    
  6. }    


11) SuggestionSpan 相当于占位符

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

13) RasterizerSpan         光栅效果

14) AbsoluteSizeSpan         绝对大小(文本字体)

[html] view plaincopyprint?
  1. private void setAbsoluteFontSpan() {  
  2.         SpannableString spannableString = new SpannableString("40号字体");  
  3.         AbsoluteSizeSpan absoluteSizeSpan = new AbsoluteSizeSpan(40);  
  4.         spannableString.setSpan(absoluteSizeSpan, 0, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
  5.         editText.append(spannableString);  
  6. }  

15) DynamicDrawableSpan    设置图片,基于文本基线或底部对齐。

16) TextAppearanceSpan 文本外貌(包括字体、大小、样式和颜色)

[html] view plaincopyprint?
  1. private void setTextAppearanceSpan() {  
  2.     SpannableString spanString = new SpannableString("文本外貌");  
  3.     TextAppearanceSpan textAppearanceSpan = new TextAppearanceSpan(this, android.R.style.TextAppearance_Medium);  
  4.     spanString.setSpan(textAppearanceSpan, 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
  5.     tv.append(spanString);  
  6. }  
0 0
原创粉丝点击