1. import android.app.Activity;
2. import android.graphics.Color;
3. import android.graphics.Typeface;
4. import android.graphics.drawable.Drawable;
5. import android.os.Bundle;
6. import android.text.Spannable;
7. import android.text.SpannableString;
8. import android.text.style.AbsoluteSizeSpan;
9. import android.text.style.BackgroundColorSpan;
10. import android.text.style.ForegroundColorSpan;
11. import android.text.style.ImageSpan;
12. import android.text.style.StrikethroughSpan;
13. import android.text.style.StyleSpan;
14. import android.text.style.URLSpan;
15. import android.text.style.UnderlineSpan;
16. import android.view.View;
17. import android.view.View.OnClickListener;
18. import android.widget.Button;
19. import android.widget.EditText;
20.
21.
22. public class SpannableStringActivity extends Activity implements
23. OnClickListener {
24.
25.
26. private EditText tv;
27. private Button underline_btn;
28. private Button strike_btn;
29. private Button style_btn;
30. private Button font_btn;
31. private Button color_btn1;
32. private Button color_btn2;
33. private Button url_btn;
34. private Button image_btn;
35.
36.
37. /** Called when the activity is first created. */
38. @Override
39. public void onCreate(Bundle savedInstanceState) {
40. super.onCreate(savedInstanceState);
41. setContentView(R.layout.main);
42.
43.
44. this.findViewById(R.id.tv);
45. this.findViewById(R.id.underline_btn);
46. this.findViewById(R.id.strike_btn);
47. this.findViewById(R.id.style_btn);
48. this.findViewById(R.id.font_btn);
49. this.findViewById(R.id.color_btn1);
50. this.findViewById(R.id.color_btn2);
51. this.findViewById(R.id.url_btn);
52. this.findViewById(R.id.image_btn);
53.
54.
55. this);
56. this);
57. this);
58. this);
59. this);
60. this);
61. this);
62. this);
63. }
64.
65.
66. @Override
67. public void onClick(View v) {
68. switch (v.getId()) {
69. case R.id.underline_btn:
70. addUnderLineSpan();
71. break;
72. case R.id.strike_btn:
73. addStrikeSpan();
74. break;
75. case R.id.style_btn:
76. addStyleSpan();
77. break;
78. case R.id.font_btn:
79. addFontSpan();
80. break;
81. case R.id.color_btn1:
82. addForeColorSpan();
83. break;
84. case R.id.color_btn2:
85. addBackColorSpan();
86. break;
87. case R.id.url_btn:
88. addUrlSpan();
89. break;
90. case R.id.image_btn:
91. addImageSpan();
92. break;
93. <span style="white-space:pre"> </span>}
94. }
95.
96.
97. /**
98. * 超链接
99. */
100. private void addUrlSpan() {
101. new SpannableString("超链接");
102. new URLSpan("tel:0123456789");
103. 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
104. tv.append(spanString);
105. }
106.
107.
108. /**
109. * 文字背景颜色
110. */
111. private void addBackColorSpan() {
112. new SpannableString("颜色2");
113. new BackgroundColorSpan(Color.YELLOW);
114. 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
115. tv.append(spanString);
116. }
117.
118.
119. /**
120. * 文字颜色
121. */
122. private void addForeColorSpan() {
123. new SpannableString("颜色1");
124. new ForegroundColorSpan(Color.BLUE);
125. 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
126. tv.append(spanString);
127. }
128.
129.
130. /**
131. * 字体大小
132. */
133. private void addFontSpan() {
134. new SpannableString("36号字体");
135. new AbsoluteSizeSpan(36);
136. 0, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
137. tv.append(spanString);
138. }
139.
140.
141. /**
142. * 粗体,斜体
143. */
144. private void addStyleSpan() {
145. new SpannableString("BIBI");
146. new StyleSpan(Typeface.BOLD_ITALIC);
147. 0, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
148. tv.append(spanString);
149. }
150.
151.
152. /**
153. * 删除线
154. */
155. private void addStrikeSpan() {
156. new SpannableString("删除线");
157. new StrikethroughSpan();
158. 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
159. tv.append(spanString);
160. }
161.
162. /**
163. * 下划线
164. */
165. private void addUnderLineSpan() {
166. new SpannableString("下划线");
167. new UnderlineSpan();
168. 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
169. tv.append(spanString);
170. }
171.
172.
173.
174. /**
175. * 图片
176. */
177. private void addImageSpan() {
178. new SpannableString(" ");
179. Drawable d = getResources().getDrawable(R.drawable.ic_launcher);
180. 0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
181. new ImageSpan(d, ImageSpan.ALIGN_BASELINE);
182. 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
183. tv.append(spanString);
184. }
185. }




xml布局文件


1. <?xml version="1.0" encoding="utf-8"?>
2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3. android:layout_width="fill_parent"
4. android:layout_height="fill_parent"
5. android:background="#ff333333"
6. android:orientation="vertical" >
7.
8.
9.
10. <EditText
11. android:id="@+id/tv"
12. android:layout_width="wrap_content"
13. android:layout_height="wrap_content"
14. android:singleLine="false"
15. android:inputType="none"/>
16.
17.
18. <GridLayout
19. android:layout_width="wrap_content"
20. android:layout_height="wrap_content"
21. android:columnCount="4" >
22.
23.
24. <Button
25. android:id="@+id/image_btn"
26. android:layout_width="wrap_content"
27. android:layout_height="wrap_content"
28. android:text="@string/image" />
29.
30.
31. <Button
32. android:id="@+id/url_btn"
33. android:layout_width="wrap_content"
34. android:layout_height="wrap_content"
35. android:text="@string/url" />
36.
37.
38. <Button
39. android:id="@+id/color_btn1"
40. android:layout_width="wrap_content"
41. android:layout_height="wrap_content"
42. android:text="@string/color1" />
43.
44.
45. <Button
46. android:id="@+id/color_btn2"
47. android:layout_width="wrap_content"
48. android:layout_height="wrap_content"
49. android:text="@string/color2" />
50.
51.
52. <Button
53. android:id="@+id/font_btn"
54. android:layout_width="wrap_content"
55. android:layout_height="wrap_content"
56. android:text="@string/font" />
57.
58.
59. <Button
60. android:id="@+id/style_btn"
61. android:layout_width="wrap_content"
62. android:layout_height="wrap_content"
63. android:text="@string/style" />
64.
65.
66. <Button
67. android:id="@+id/strike_btn"
68. android:layout_width="wrap_content"
69. android:layout_height="wrap_content"
70. android:text="@string/strike" />
71.
72.
73. <Button
74. android:id="@+id/underline_btn"
75. android:layout_width="wrap_content"
76. android:layout_height="wrap_content"
77. android:text="@string/underline" />
78. </GridLayout>
79.
80.
81. </LinearLayout>