开发的过程当中会有这么一个需求:在一段话中包含有若干个连接,程序能识别出连接并突出显示,不能有下划线,用指定颜色,点击后打开webview并跳转到该网页java
主要包括如下几个内容:web
一、识别连接url,用正则表达式作。正则表达式
二、突出显示,继承重写ClickableSpanmarkdown
三、跳转需重写ClickableSpan里面的onClick事件ide
ClickableSpan重写以下:this
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
首先是匹配url的正则表达式:spa
Pattern pattern = Pattern.compile("[http|https]+[://]+[0-9A-Za-z:/[-]_#[?][=][.]]*", Pattern.CASE_INSENSITIVE); Matcher m = pattern.matcher(string);复制代码
而后是找出全部的url,并设置ClickableSpan替换code
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对象。orm