首先上代码:
TextView tv_phone = findViewById(R.id.tv_phone);
tv_phone.setText("电话是15800000000和0754-84571539");
//电话号码的正则表达式(固定电话 + 11位手机号)
Pattern pattern = Pattern.compile("(0\\d{2}-\\d{8}(-\\d{1,4})?)|(0\\d{3}-\\d{7,8}(-\\d{1,4})?)|\\d{11}");
Linkify.addLinks(tv_phone, pattern, "tel:");
//修改超文本链接的字体颜色
tv_phone.setLinkTextColor(getResources().getColor(R.color.blue));
使用正则表达式,这里对11位手机号的处理只使用了最后的"\\d{11}",也就是识别到11位数字则默认为手机号,此处也可以根据自己的需要进行修改,而我找到比较好的提取手机号的正则表达式如下:
Pattern pattern = Pattern.compile("(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\\d{8}");
除了刚刚说到的"\\d{11}"之外,其他的那一串表达式就是座机号的正则表达式,也就是下面所示最后由Linkify直接实现对号码的点击跳转。
Pattern pattern = Pattern.compile("(0\\d{2}-\\d{8}(-\\d{1,4})?)|(0\\d{3}-\\d{7,8}(-\\d{1,4})?)");
最后一句的 tv_phone.setLinkTextColor(getResources().getColor(R.color.blue));是对设定的链接文本修改颜色
下面附上实现结果图: