TextView实现超链接并自定义点击效果

1.有的时候我们会有这样的需求,在一个TextView中显示文本。但是文本的如果含有链接的时候要识别出来,显示成链接的形式。

TextView可以设置属性来实现超链接的显示,即当textview中含有以"http"或"https"等开头的一些链接的时候会显示成链接的形式。

最简单的方式就是在xml中设置autoLink属性。autoLink属性有六个值,分别是:

none:正常

web:将文本标识成一个网址

phone:将文本标识成一个电话号码

mail:将文本标识成一个邮件地址

map:会打开地图应用

all:根据文本自动识别


如:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:autoLink="web"
    android:text="Hello World!" />
 
 
2.有的时候在满足的显示成链接的情况下我们还会需要设置链接的点击效果,我们希望能够在app内部打开,或者能够解析链接,然后跳到我们我们期望的页面。但是
在上述的情况下我们点击链接会总是跳到浏览器,所以我们需要怎么设置呢?
 
1)xml:在xml中设置android:autoLink="web"
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:autoLink="web"
    android:text="Hello World!" />
2)自定义一个ClickableSpan。
private class MyURLSpan extends ClickableSpan {
    private String url;
    public MyURLSpan(String url) {
        this.url = url;
    }

    @Override
    public void onClick(View arg0) {
        Log.i("ruxing","链接被点击:"+url);
        //在这里可以解析url进行跳转操作
    }
}
3)在代码里设置TextView
tv_content=(TextView)findViewById(R.id.tv_content);
CharSequence text = tv_content.getText();
if (text instanceof Spannable) {
    int end = text.length();
    Spannable sp = (Spannable) text;
    URLSpan urls[] = sp.getSpans(0, end, URLSpan.class);
    SpannableStringBuilder style = new SpannableStringBuilder(text);
    style.clearSpans();
    for (URLSpan urlSpan : urls) {
        MyURLSpan myURLSpan = new MyURLSpan(urlSpan.getURL());
        style.setSpan(myURLSpan, sp.getSpanStart(urlSpan),
                sp.getSpanEnd(urlSpan),
                Spannable.SPAN_EXCLUSIVE_INCLUSIVE);

    }
    tv_content.setText(style);
}

完整的代码地址:https://github.com/ruxing1102/TextViewLinkClick

 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值