点击TextView中链接,自定义处理事件

[1].[代码] [Java]代码 跳至 [1]

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
public class MainActivity extends Activity {
 
     private TextView  tv;
     static Context ctx= null ;
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         ctx= this ;
         tv = (TextView) findViewById(R.id.tv);
//        String htmlLinkText = "<a href="/" mce_href="/""http://www.baidu.com/"><u>我的CSDN博客 </u></a>";  
//        tv.setText(Html.fromHtml(htmlLinkText));
         
         
         String ttt = "电话:2371023  网址:www.baidu.com 家乐福email: google@163.com 房价大幅" ;
         Spannable spannable = new SpannableString(ttt);
         Linkify.addLinks(spannable, Linkify.EMAIL_ADDRESSES);
         //spannable = PatternUtil.getSpannable(spannable, PatternUtil.b, new String[] { "http://", "https://", "rtsp://" });
         //Linkify.addLinks(spannable, PatternUtil.b, "http://");
         final Pattern a = Pattern.compile( "(\\+[0-9]+[\\- \\.]*)?(\\([0-9]+\\)[\\- \\.]*)?([0-9][0-9\\-\\.][0-9\\-\\.]+[0-9])" );
         Linkify.addLinks(spannable, a, "tel:" );
         Pattern b = Pattern.compile( "((?:(http|https|Http|Https|rtsp|Rtsp):\\/\\/(?:(?:[a-zA-Z0-9\\$\\-\\_\\.\\+\\!\\*\\'\\(\\)\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,64}(?:\\:(?:[a-zA-Z0-9\\$\\-\\_\\.\\+\\!\\*\\'\\(\\)\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,25})?\\@)?)?((?:(?:[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}\\.)+(?:(?:aero|arpa|asia|a[cdefgilmnoqrstuwxz])|(?:biz|b[abdefghijmnorstvwyz])|(?:cat|com|coop|c[acdfghiklmnoruvxyz])|d[ejkmoz]|(?:edu|e[cegrstu])|f[ijkmor]|(?:gov|g[abdefghilmnpqrstuwy])|h[kmnrtu]|(?:info|int|i[delmnoqrst])|(?:jobs|j[emop])|k[eghimnprwyz]|l[abcikrstuvy]|(?:mil|mobi|museum|m[acdeghklmnopqrstuvwxyz])|(?:name|net|n[acefgilopruz])|(?:org|om)|(?:pro|p[aefghklmnrstwy])|qa|r[eosuw]|s[abcdeghijklmnortuvyz]|(?:tel|travel|t[cdfghjklmnoprtvwz])|u[agksyz]|v[aceginu]|w[fs]|(?:xn\\-\\-0zwm56d|xn\\-\\-11b5bs3a9aj6g|xn\\-\\-80akhbyknj4f|xn\\-\\-9t4b11yi5a|xn\\-\\-deba0ad|xn\\-\\-g6w251d|xn\\-\\-hgbk6aj7f53bba|xn\\-\\-hlcj6aya9esc7a|xn\\-\\-jxalpdlp|xn\\-\\-kgbechtv|xn\\-\\-zckzah)|y[etu]|z[amw]))|(?:(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9])\\.(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[0-9])))(?:\\:\\d{1,5})?)(\\/(?:(?:[a-zA-Z0-9 -퟿豈-﷏ﷰ-￯\\;\\/\\?\\:\\@\\&\\=\\#\\~\\-\\.\\+\\!\\*\\'\\(\\)\\,\\_])|(?:\\%[a-fA-F0-9]{2}))*)?" );
         tv.setText(spannable);
         Linkify.addLinks(tv, b, "http://" );
         tv.setLinksClickable( true );
         
         tv.setMovementMethod(LinkMovementMethod.getInstance());  
         CharSequence text = tv.getText();  
         if (text instanceof Spannable){  
             int end = text.length();  
             Spannable sp = (Spannable)tv.getText();  
             URLSpan[] urls=sp.getSpans( 0 , end, URLSpan. class );   
             SpannableStringBuilder style= new SpannableStringBuilder(text);  
             style.clearSpans(); //should clear old spans  
             for (URLSpan url : urls){  
                 MyURLSpan myURLSpan = new MyURLSpan(url.getURL());  
                 style.setSpan(myURLSpan,sp.getSpanStart(url),sp.getSpanEnd(url),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
             }  
             tv.setText(style);  
         }
     }
      
     private static class MyURLSpan extends ClickableSpan{  
            
         private String mUrl;  
         Pattern b = Pattern.compile( "((?:(http|https|Http|Https|rtsp|Rtsp):\\/\\/(?:(?:[a-zA-Z0-9\\$\\-\\_\\.\\+\\!\\*\\'\\(\\)\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,64}(?:\\:(?:[a-zA-Z0-9\\$\\-\\_\\.\\+\\!\\*\\'\\(\\)\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,25})?\\@)?)?((?:(?:[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}\\.)+(?:(?:aero|arpa|asia|a[cdefgilmnoqrstuwxz])|(?:biz|b[abdefghijmnorstvwyz])|(?:cat|com|coop|c[acdfghiklmnoruvxyz])|d[ejkmoz]|(?:edu|e[cegrstu])|f[ijkmor]|(?:gov|g[abdefghilmnpqrstuwy])|h[kmnrtu]|(?:info|int|i[delmnoqrst])|(?:jobs|j[emop])|k[eghimnprwyz]|l[abcikrstuvy]|(?:mil|mobi|museum|m[acdeghklmnopqrstuvwxyz])|(?:name|net|n[acefgilopruz])|(?:org|om)|(?:pro|p[aefghklmnrstwy])|qa|r[eosuw]|s[abcdeghijklmnortuvyz]|(?:tel|travel|t[cdfghjklmnoprtvwz])|u[agksyz]|v[aceginu]|w[fs]|(?:xn\\-\\-0zwm56d|xn\\-\\-11b5bs3a9aj6g|xn\\-\\-80akhbyknj4f|xn\\-\\-9t4b11yi5a|xn\\-\\-deba0ad|xn\\-\\-g6w251d|xn\\-\\-hgbk6aj7f53bba|xn\\-\\-hlcj6aya9esc7a|xn\\-\\-jxalpdlp|xn\\-\\-kgbechtv|xn\\-\\-zckzah)|y[etu]|z[amw]))|(?:(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9])\\.(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[0-9])))(?:\\:\\d{1,5})?)(\\/(?:(?:[a-zA-Z0-9 -퟿豈-﷏ﷰ-￯\\;\\/\\?\\:\\@\\&\\=\\#\\~\\-\\.\\+\\!\\*\\'\\(\\)\\,\\_])|(?:\\%[a-fA-F0-9]{2}))*)?" );
         MyURLSpan(String url) {  
             mUrl =url;  
         }  
         @Override
         public void onClick(View widget) {
             // TODO Auto-generated method stub
             if (mUrl.matches(b.toString()))
                     {
                 Toast.makeText(ctx, "hello!" ,Toast.LENGTH_SHORT).show();
                     }
             
         }  
     }
}
 
 
//package wst.webview;
//
//import android.app.Activity;
//import android.content.Context;
//import android.os.Bundle;
//import android.text.Html;
//import android.text.Spannable;
//import android.text.SpannableStringBuilder;
//import android.text.method.LinkMovementMethod;
//import android.text.style.ClickableSpan;
//import android.text.style.URLSpan;
//import android.view.View;
//import android.widget.TextView;
//import android.widget.Toast;
//public class TextHtml extends Activity {
//    /** Called when the activity is first created. */
//    private TextView  tv;
//    static Context ctx=null;
//    @Override
//    public void onCreate(Bundle savedInstanceState) {
//        super.onCreate(savedInstanceState);
//        setContentView(R.layout.main);
//        ctx=this;
//        tv = (TextView) findViewById(R.id.tv);
//        String htmlLinkText = "<a href="/" mce_href="/""http://www.baidu.com/"><u>我的CSDN博客 </u></a>";  
//        tv.setText(Html.fromHtml(htmlLinkText));
//        tv.setMovementMethod(LinkMovementMethod.getInstance());  
//        CharSequence text = tv.getText();  
//        if(text instanceof Spannable){  
//            int end = text.length();  
//            Spannable sp = (Spannable)tv.getText();  
//            URLSpan[] urls=sp.getSpans(0, end, URLSpan.class);   
//            SpannableStringBuilder style=new SpannableStringBuilder(text);  
//            style.clearSpans();//should clear old spans  
//            for(URLSpan url : urls){  
//                MyURLSpan myURLSpan = new MyURLSpan(url.getURL());  
//                style.setSpan(myURLSpan,sp.getSpanStart(url),sp.getSpanEnd(url),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
//            }  
//            tv.setText(style);  
//        }
//    }
//    
//    private static class MyURLSpan extends ClickableSpan{  
//          
//        private String mUrl;  
//        MyURLSpan(String url) {  
//            mUrl =url;  
//        }  
//        @Override
//        public void onClick(View widget) {
//            // TODO Auto-generated method stub
//            Toast.makeText(ctx, “hello!”,Toast.LENGTH_LONG).show();
//        }  
//    }
//}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值