1.仿照手机QQ,将字符串中含有的url设置成点击,点击之后可以实现跳转。
(1) 定义一个SpannableString对象,用于对字符串的各种处理,并定义一个字符串用于检测是否正确。
String text = "这里使用百度的网址http://www.baidu.com和腾讯的网站http://www.qq.com进行测试";
private TextView textview;
// SpannableString主要是对字符串的处理,可以对字符串中的某些字符加入颜色,背景,下划线等之类的效果;
SpannableString sp;
(2) 使用正则表达式,提取出所有的Url
private void checkUrlText(SpannableString sp, String text) {
Pattern pattern = Pattern
.compile("((http|ftp|https)://)(([a-zA-Z0-9\\._-]+\\.[a-zA-Z]{2,6})|([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}))(:[0-9]{1,4})*(/[a-zA-Z0-9\\&%_\\./-~-]*)?");
Matcher matcher = pattern.matcher(text);
int start = 0;
//遍历取出字符串中所有的符合条件的;
while (matcher.find(start)) {
start = matcher.end();
sp.setSpan(new MyUrlSpan(matcher.group()), matcher.start(),
matcher.end(), Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
if (start >= text.length()) {
break;
}
}
textview.setText(sp);
}
(3)写一个继承ClickableSpan的类,实现点击链接,想要实现的结果。
class MyUrlSpan extends ClickableSpan {
private String mUrl;
MyUrlSpan(String url) {
mUrl = url;
}
//点击网址之后,跳转到具体的网站去
@Override
public void onClick(View widget) {
Uri url= Uri.parse(mUrl);
Intent intent=new Intent(Intent.ACTION_VIEW,url);
startActivity(intent);
}
}
不过点击的时候,链接那部分的文字的背景没有改变,有待优化。