android实现超链接的3中方法

1.通过SpannableString设置超链接:

 

通过SpannableString来实现的,核心方法是:

setSpan (Object what, int start, int end, int flags)

主要看start与end,一个是字符的起始下标,从0开始算,end则是结束为止,

包含起始位置,而不包含结束位置的字符哦!另外中英文都算一个字符!

示例代码如下:

 

view source print ?
01. SpannableString mSpannableString =new SpannableString(
02. "打开百度,拨打电话,发送短信,发送邮件,发送彩信,打开地图");
03. // 设置超链接 (需要添加setMovementMethod方法附加响应)
04. mSpannableString.setSpan(newURLSpan("http://www.baidu.com"),0, 4,
05. Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
06. mSpannableString.setSpan(newURLSpan("tel:13756565654"),5, 9,
07. Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);// 电话
08. mSpannableString.setSpan(newURLSpan("sms:13756565654"),10, 14,
09. Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);// 短信 使用sms:或者smsto:
10. mSpannableString.setSpan(newURLSpan("mailto:[email protected]"),
11. 15,19, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);// 邮件
12. mSpannableString.setSpan(newURLSpan("mms:13756565654"),20, 24,
13. Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);// 彩信 使用mms:或者mmsto:
14. mSpannableString.setSpan(newURLSpan("geo:38.899533,-77.036476"),25,
15. 29, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);// 地图
16. txtShow.setMovementMethod(LinkMovementMethod.getInstance());
17. txtShow.setText(mSpannableString);

运行截图:

 

android实现超链接的3中方法_第1张图片

ps:这里的发送邮件与打开地图都是用不了的,因为天朝里的Android手机通常都是被

阉割过的,一些Google的服务都给去掉了~

2.通过XML中的autoLink属性来设置:

除了上面这种方法外,我们还可以在XML通过autoLink属性来设置不同类型的超链接,用法如下:

android实现超链接的3中方法_第2张图片

 

all就是全部都包含,自动识别协议头~

在Java代码中可以调用setAutoLinkMask(Linkify.ALL);

这个时候可以不写协议头,autolink会自动识别,但是需要设置:

setMovementMethod(LinkMovementMethod.getInstance());

不然点击了是不会跳转的~

3.通过HTML中的超链接来设置:

还有一种,就是通过html的超链接标签,代码如下:

 

view source print ?
1. //注意这里必须加上协议号,即http://。否则,系统会以为该链接是activity,而实际这个activity不存在,程序就崩溃。
3. CharSequence charSequence = Html.fromHtml(html);
4. txtShow.setText(charSequence);
5. txtShow.setMovementMethod(LinkMovementMethod.getInstance());

运行截图:

 

android实现超链接的3中方法_第3张图片


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); 
        } 
    } 

你可能感兴趣的:(android工作小结)