[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();
// }
// }
//}
|