我们使用QQ,微信的时候,会发现:其文本样式多种多样,可以在TextView中显示表情,图片,超链接等等。今天就来大致总结一下相关的样式。

先看代码:



1. /**
2.          * 设置前景色
3.          * @param tv
4.          */  
5. private void setForegroundColorSpan(TextView tv) {    
6. new SpannableString("前景色textview");    
7. new ForegroundColorSpan(Color.BLUE);    
8. 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    
9.             tv.append(spanString);    
10.         }    
11.           
12. /**
13.          * 设置背景色
14.          * @param tv
15.          */  
16. private void setBackgroundColorSpan(TextView  tv) {    
17. new SpannableString("背景色textview");    
18. new BackgroundColorSpan(Color.YELLOW);    
19. 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    
20.             tv.append(spanString);    
21.         }   
22. /**
23.          * 设置粗体样式
24.          * @param tv
25.          */  
26. private void setStyleSpan(TextView tv) {    
27. new SpannableString("粗体斜体textview");    
28. new StyleSpan(Typeface.BOLD_ITALIC);    
29. 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    
30.             tv.append(spanString);    
31.         }    
32. /**
33.          * 设置字体大小
34.          * @param tv
35.          */  
36. private void setRelativeFontSpan(TextView tv) {  
37. new SpannableString("字体相对大小textview");  
38. new RelativeSizeSpan(2.5f), 0, 6,Spannable.SPAN_INCLUSIVE_EXCLUSIVE);  
39.             tv.append(spanString);      
40.         }  
41. /**
42.          * 设置文本字体
43.          * @param tv
44.          */  
45. private void setTypefaceSpan(TextView tv) {  
46. new SpannableString("文本字体textview");  
47. new TypefaceSpan("monospace"), 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
48.             tv.append(spanString);  
49.         }  
50. /**
51.          * 添加URL超链接
52.          * @param tv
53.          */  
54. private void addUrlSpan(TextView tv) {    
55. new SpannableString("csdntextview");    
5;    
57. 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    
58.             tv.append(spanString);  
59.             tv.setMovementMethod(LinkMovementMethod.getInstance());  
60.         }    
61. /**
62.          * 在文字中显示图片表情等
63.          * @param tv
64.          */  
65. private void addImageSpan(TextView tv) {    
66. new SpannableString("文中有图片表情等textview");    
67.             Drawable d = getResources().getDrawable(R.drawable.ic_launcher);    
68. 0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());    
69. new ImageSpan(d, ImageSpan.ALIGN_BASELINE);    
70. 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    
71.             tv.append(spanString);    
72.         }   
73. /**
74.          * 点击后跳转Activity
75.          * @param textView
76.          * @param packageContext
77.          * @param cls
78.          */  
79. private void clickableSpan(TextView textView,final Context packageContext,final Class<?> cls){  
80. "显示Activity";  
81. new SpannableString(text);  
82. new ClickableSpan() {  
83. @Override  
84. public void onClick(View widget) {  
85. new Intent(packageContext,cls);  
86.                     startActivity(intent);  
87.                 }  
88. // 表示点击整个text的长度都有效触发这个事件  
89. 0, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
90.             textView.setText(spannableString);  
91.             textView.setMovementMethod(LinkMovementMethod.getInstance());  
92.         }  
93. /**
94.          * 添加下划线
95.          * @param tv
96.          */  
97. private void addUnderLineSpan(TextView tv) {    
98. new SpannableString("下划线textview");    
99. new UnderlineSpan();    
100. 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    
101.             tv.append(spanString);    
102.         }   
103. /**
104.          * 添加删除线样式
105.          * @param tv
106.          */  
107. private void addStrikeSpan(TextView tv) {    
108. new SpannableString("删除线textview");    
109. new StrikethroughSpan();    
110. 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    
111.             tv.append(spanString);    
112.         }




效果截图:

android中TextView的SpannableString小结_android


更多样式,参见官方文档。

http://developer.android.com/reference/android/text/style/package-summary.html