android SpannableString使用详解

  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.     tv = (EditText) this.findViewById(R.id.tv);  
  45.     underline_btn = (Button) this.findViewById(R.id.underline_btn);  
  46.     strike_btn = (Button) this.findViewById(R.id.strike_btn);  
  47.     style_btn = (Button) this.findViewById(R.id.style_btn);  
  48.     font_btn = (Button) this.findViewById(R.id.font_btn);  
  49.     color_btn1 = (Button) this.findViewById(R.id.color_btn1);  
  50.     color_btn2 = (Button) this.findViewById(R.id.color_btn2);  
  51.     url_btn = (Button) this.findViewById(R.id.url_btn);  
  52.     image_btn = (Button) this.findViewById(R.id.image_btn);  
  53.   
  54.   
  55.     underline_btn.setOnClickListener(this);  
  56.     strike_btn.setOnClickListener(this);  
  57.     style_btn.setOnClickListener(this);  
  58.     font_btn.setOnClickListener(this);  
  59.     color_btn1.setOnClickListener(this);  
  60.     color_btn2.setOnClickListener(this);  
  61.     url_btn.setOnClickListener(this);  
  62.     image_btn.setOnClickListener(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. "WHITE-SPACE: pre"}  
  94. }  
  95.   
  96.   
  97. /** 
  98. * 超链接 
  99. */  
  100. private void addUrlSpan() {  
  101.     SpannableString spanString = new SpannableString("超链接");  
  102.     URLSpan span = new URLSpan("tel:0123456789");  
  103.     spanString.setSpan(span, 03, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
  104.     tv.append(spanString);  
  105. }  
  106.   
  107.   
  108. /** 
  109. * 文字背景颜色 
  110. */  
  111. private void addBackColorSpan() {  
  112.     SpannableString spanString = new SpannableString("颜色2");  
  113.     BackgroundColorSpan span = new BackgroundColorSpan(Color.YELLOW);  
  114.     spanString.setSpan(span, 03, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
  115.     tv.append(spanString);  
  116. }  
  117.   
  118.   
  119. /** 
  120. * 文字颜色 
  121. */  
  122. private void addForeColorSpan() {  
  123.     SpannableString spanString = new SpannableString("颜色1");  
  124.     ForegroundColorSpan span = new ForegroundColorSpan(Color.BLUE);  
  125.     spanString.setSpan(span, 03, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
  126.     tv.append(spanString);  
  127. }  
  128.   
  129.   
  130. /** 
  131. * 字体大小 
  132. */  
  133. private void addFontSpan() {  
  134.     SpannableString spanString = new SpannableString("36号字体");  
  135.     AbsoluteSizeSpan span = new AbsoluteSizeSpan(36);  
  136.     spanString.setSpan(span, 05, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
  137.     tv.append(spanString);  
  138. }  
  139.   
  140.   
  141. /** 
  142. * 粗体,斜体 
  143. */  
  144. private void addStyleSpan() {  
  145.     SpannableString spanString = new SpannableString("BIBI");  
  146.     StyleSpan span = new StyleSpan(Typeface.BOLD_ITALIC);  
  147.     spanString.setSpan(span, 02, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
  148.     tv.append(spanString);  
  149. }  
  150.   
  151.   
  152. /** 
  153. * 删除线 
  154. */  
  155. private void addStrikeSpan() {  
  156.     SpannableString spanString = new SpannableString("删除线");  
  157.     StrikethroughSpan span = new StrikethroughSpan();  
  158.     spanString.setSpan(span, 03, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
  159.     tv.append(spanString);  
  160. }  
  161.   
  162. /** 
  163. * 下划线 
  164. */  
  165. private void addUnderLineSpan() {  
  166.     SpannableString spanString = new SpannableString("下划线");  
  167.     UnderlineSpan span = new UnderlineSpan();  
  168.     spanString.setSpan(span, 03, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
  169.     tv.append(spanString);  
  170. }  
  171.   
  172.   
  173.   
  174. /** 
  175. * 图片 
  176. */  
  177. private void addImageSpan() {  
  178.     SpannableString spanString = new SpannableString(" ");  
  179.     Drawable d = getResources().getDrawable(R.drawable.ic_launcher);  
  180.     d.setBounds(00, d.getIntrinsicWidth(), d.getIntrinsicHeight());  
  181.     ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);  
  182.     spanString.setSpan(span, 01, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
  183.     tv.append(spanString);  
  184. }  
  185. }  

xml布局文件

[html]  view plain copy
  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>  

android SpannableString使用详解_第1张图片
要完成这种效果,使用如下方法,传入26.5,让小数点后一位字体变小。记在这里,以后备用。
    private CharSequence getTempStr(String tempStr) {
        if (TextUtils.isEmpty(tempStr))
            return "";
        int len = tempStr.length();
        SpannableString spannableString = new SpannableString(tempStr);
        AbsoluteSizeSpan span = new AbsoluteSizeSpan(45, true);
        spannableString.setSpan(span, len - 1, len, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        return spannableString;
    }



你可能感兴趣的:(android)