分享

TextView中实现可点击链接的显示

 quasiceo 2014-04-12

TextView中实现可点击链接的显示



  开发的过程中会有这么一个需求:在一段话中包含有若干个链接,程序能识别出链接并突出显示,不能有下划线,用指定颜色,点击后打开webview并跳转到该网页


  主要包括以下几个内容:


  1、识别链接url,用正则表达式做。


  2、突出显示,继承重写ClickableSpan


  3、跳转需重写ClickableSpan里面的onClick事件


ClickableSpan重写如下:


复制代码

class NoLineClickSpan extends ClickableSpan {
        String text;

        public NoLineClickSpan(String text) {
            super();
            this.text = text;
        }

        @Override
        public void updateDrawState(TextPaint ds) {
            ds.setColor(Color.parseColor("#ffffff"));//指定颜色值
            ds.setUnderlineText(false); // 去掉下划线
        }

        @Override
        public void onClick(View widget) {
            // 点击超链接时调用
            final Bundle bundle = new Bundle();
            bundle.putString("URL", text);
            Intent intent =//指定的跳转事件
            mContext.startActivity(intent);
        }
    }

复制代码

  在设置TextView之前需要对内容进行处理,将链接替换成为ClickableSpan,再设置为TextView的text。


  首先是匹配url的正则表达式:



Pattern pattern = Pattern.compile("[http|https]+[://]+[0-9A-Za-z:/[-]_#[?][=][.]]*", Pattern.CASE_INSENSITIVE);
Matcher m = pattern.matcher(string);


  然后是找出所有的url,并设置ClickableSpan替换


复制代码

int startPoint = 0;
while (m.find(startPoint)) {
    int endPoint = m.end();
    String hit = m.group();
    ClickableSpan clickSpan = new NoLineClickSpan(hit);
    sps.setSpan(clickSpan, endPoint - hit.length(), endPoint, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//用Span替换对应长度的url
    startPoint = endPoint;
}
textView.setText(sps);

复制代码

  其中sps为用String初始化的SpannableString对象。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多