赞
踩
通过SpannableString来实现的,核心方法是:
setSpan (Object what, int start, int end, int flags)
主要看start与end,一个是字符的起始下标,从0开始算,end则是结束为止,
包含起始位置,而不包含结束位置的字符哦!另外中英文都算一个字符!
示例代码如下:
01.
SpannableString mSpannableString =
new
SpannableString(
02.
"打开百度,拨打电话,发送短信,发送邮件,发送彩信,打开地图"
);
03.
// 设置超链接 (需要添加setMovementMethod方法附加响应)
04.
mSpannableString.setSpan(
new
URLSpan(
"http://www.baidu.com"
),
0
,
4
,
05.
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
06.
mSpannableString.setSpan(
new
URLSpan(
"tel:13756565654"
),
5
,
9
,
07.
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// 电话
08.
mSpannableString.setSpan(
new
URLSpan(
"sms:13756565654"
),
10
,
14
,
09.
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// 短信 使用sms:或者smsto:
10.
mSpannableString.setSpan(
new
URLSpan(
"mailto:779878443@qq.com"
),
11.
15
,
19
, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// 邮件
12.
mSpannableString.setSpan(
new
URLSpan(
"mms:13756565654"
),
20
,
24
,
13.
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// 彩信 使用mms:或者mmsto:
14.
mSpannableString.setSpan(
new
URLSpan(
"geo:38.899533,-77.036476"
),
25
,
15.
29
, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// 地图
16.
txtShow.setMovementMethod(LinkMovementMethod.getInstance());
17.
txtShow.setText(mSpannableString);
ps:这里的发送邮件与打开地图都是用不了的,因为天朝里的Android手机通常都是被
阉割过的,一些Google的服务都给去掉了~
除了上面这种方法外,我们还可以在XML通过autoLink属性来设置不同类型的超链接,用法如下:
all就是全部都包含,自动识别协议头~
在Java代码中可以调用setAutoLinkMask(Linkify.ALL);
这个时候可以不写协议头,autolink会自动识别,但是需要设置:
setMovementMethod(LinkMovementMethod.getInstance());
不然点击了是不会跳转的~
还有一种,就是通过html的<a>超链接标签,代码如下:
1.
//注意这里必须加上协议号,即http://。否则,系统会以为该链接是activity,而实际这个activity不存在,程序就崩溃。
2.
String html =
"<a href='http://www.baidu.com'>百度一下</a>"
;
3.
CharSequence charSequence = Html.fromHtml(html);
4.
txtShow.setText(charSequence);
5.
txtShow.setMovementMethod(LinkMovementMethod.getInstance());
android 如何在超链接跳转到activity
public void addIntentLink(final TextView view,final String text) {
SpannableString sp = new SpannableString(text);
final Intent userIntent = new Intent();
userIntent.setClass(context, UserInfoActivity.class);
sp.setSpan(new IntentSpan(new OnClickListener() {
public void onClick(View view) {
context.startActivity(userIntent);
}
}),start,end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
view.setText(sp);
view.setMovementMethod(LinkMovementMethod.getInstance());
}
//IntentSpan 类
public class IntentSpan extends ClickableSpan {
private final OnClickListener listener;
public IntentSpan(View.OnClickListener listener) {
this.listener = listener;
}
@Override
public void onClick(View view) {
listener.onClick(view);
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。