Android TextView中鏈接(link)點擊事件的截取


布局文件xml

1 <TextView
2                 android:layout_width="match_parent"
3                 android:layout_height="match_parent"
4                 android:id="@+id/test_note"
5                 android:autoLink="all"
6                 />

這里autoLink="all"就是鏈接所有類型的,包括網址,電話,郵件地址什么的。

Java代碼里,對鏈接的事件進行監聽。

 1 package com.jayce.testlink;
 2 
 3 import android.net.Uri;
 4 import android.os.Bundle;
 5 import android.app.Activity;
 6 import android.content.Intent;
 7 import android.text.Spannable;
 8 import android.text.SpannableStringBuilder;
 9 import android.text.style.ClickableSpan;
10 import android.text.style.URLSpan;
11 import android.util.Log;
12 import android.view.View;
13 import android.view.View.OnClickListener;
14 import android.widget.TextView;
15 
16 public class TextLinkActivity extends Activity {
17 
18     @Override
19     public void onCreate(Bundle savedInstanceState) {
20         super.onCreate(savedInstanceState);
21         setContentView(R.layout.activity_text_link);
22         TextView tv = (TextView)findViewById(R.id.test_note);
23         CharSequence text = tv.getText(); 
24         /*
25          * 以下是textview的內容(這里給了3個示例鏈接和一個普通字符串)
26          * 13888888888
27          * www.google.com
28          * test@gmail.com
29          * jaycetest
30          */
31         if (text instanceof Spannable) {  
32             int end = text.length();
33             Spannable sp = (Spannable) tv.getText();  
34             URLSpan[] spans = sp.getSpans(0, end, URLSpan.class);  
35             SpannableStringBuilder style = new SpannableStringBuilder(text);  
36             style.clearSpans();// should clear old spans  
37             for (URLSpan span : spans) {  
38                 JayceSpan mySpan = new JayceSpan(span.getURL());  
39                 style.setSpan(mySpan, sp.getSpanStart(span), sp.getSpanEnd(span), Spannable.SPAN_EXCLUSIVE_INCLUSIVE);  
40             }  
41             tv.setText(style); 
42         }
43         tv.setOnClickListener(new OnClickListener(){
44 
45             @Override
46             public void onClick(View v) {
47                 // TODO Auto-generated method stub
48                 /*
49                  * 這里是對所有點擊消息的監聽
50                  * 可以把鏈接的做標記剔除后監聽非鏈接的點擊
51                  * 比如jaycetest區域的點擊
52                  */
53             }});
54     }
55     
56     private  class JayceSpan extends ClickableSpan {  
57           
58         private String mSpan;  
59   
60         JayceSpan(String span) {  
61             mSpan = span;  
62         }  
63   
64         @Override  
65         public void onClick(View widget) {  
66             Log.e("jayce", "span:" + mSpan);
67             /*鏈接被點擊
68              * 這里可以做一些自己定義的操作
69              */
70             Intent intent = new Intent(Intent.ACTION_VIEW);
71             intent.setData(Uri.parse(mSpan));
72             startActivity(intent);
73         }  
74     }  
75 
76 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM