Android ClickableSpan 应用实例

[java] view plain copy
  1. package com.test;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.Context;  
  5. import android.graphics.Color;  
  6. import android.os.Bundle;  
  7. import android.text.Html;  
  8. import android.text.Spannable;  
  9. import android.text.SpannableStringBuilder;  
  10. import android.text.method.LinkMovementMethod;  
  11. import android.text.style.ClickableSpan;  
  12. import android.text.style.URLSpan;  
  13. import android.view.View;  
  14. import android.widget.TextView;  
  15. import android.widget.Toast;  
  16.   
  17. public class Test2Activity extends Activity {  
  18.     /** Called when the activity is first created. */  
  19.     private TextView tv;  
  20.     private static Context ctx;  
  21.     @Override  
  22.     public void onCreate(Bundle savedInstanceState) {  
  23.        super.onCreate(savedInstanceState);  
  24.   
  25.        tv = new TextView(this);  
  26.        ctx = this;  
  27.   
  28.        String htmlLinkText = "";  
  29.   
  30.        htmlLinkText = "aaaaaaaaaa"  
  31.          + "<a style=\"color:red;\" href=\"我是超链接……\">超链接点击事件</a>"  
  32.          + "aaaaaaaaaaaaaaaa";  
  33.        // 文字的样式(style)被覆盖,不能改变……  
  34.   
  35.        tv.setText(Html.fromHtml(htmlLinkText));  
  36.        tv.setMovementMethod(LinkMovementMethod.getInstance());  
  37.        CharSequence text = tv.getText();  
  38.        if (text instanceof Spannable) {  
  39.         int end = text.length();  
  40.         Spannable sp = (Spannable) tv.getText();  
  41.         URLSpan[] urls = sp.getSpans(0, end, URLSpan.class);  
  42.         SpannableStringBuilder style = new SpannableStringBuilder(text);  
  43.         style.clearSpans();// should clear old spans  
  44.         for (URLSpan url : urls) {  
  45.          MyURLSpan myURLSpan = new MyURLSpan(url.getURL());  
  46.          style.setSpan(myURLSpan, sp.getSpanStart(url), sp  
  47.            .getSpanEnd(url), Spannable.SPAN_EXCLUSIVE_INCLUSIVE);  
  48.         }  
  49.         tv.setText(style);  
  50.        }  
  51.        setContentView(tv);  
  52.   
  53.     }  
  54.   
  55.     private static class MyURLSpan extends ClickableSpan {  
  56.   
  57.        private String mUrl;  
  58.   
  59.        MyURLSpan(String url) {  
  60.         mUrl = url;  
  61.        }  
  62.   
  63.        @Override  
  64.        public void onClick(View widget) {  
  65.         Toast.makeText(ctx, mUrl, Toast.LENGTH_LONG).show();  
  66.         widget.setBackgroundColor(Color.parseColor("#00000000"));  
  67.        }  
  68.     }  

你可能感兴趣的:(android)