TextView 处理字符串 点击跳转 高亮同理 例如url点击跳转浏览器和点击电话号码拨打电话

原创
2016/09/20 16:57
阅读数 116

废话不多说直接上代码:

public static SpannableStringBuilder formatUrlString(String contentStr) {

    SpannableStringBuilder sp;
    if (!TextUtils.isEmpty(contentStr)) {

        sp = new SpannableStringBuilder(contentStr);
        try {
            //处理url匹配
            Pattern urlPattern = Pattern.compile("(http|https|ftp|svn)://([a-zA-Z0-9]+[/?.?])" +
                    "+[a-zA-Z0-9]*\\??([a-zA-Z0-9]*=[a-zA-Z0-9]*&?)*");
            Matcher urlMatcher = urlPattern.matcher(contentStr);

            while (urlMatcher.find()) {
                final String url = urlMatcher.group();
                if (!TextUtils.isEmpty(url)) {
                    sp.setSpan(new SpannableClickable() {
                        @Override
                        public void onClick(View widget) {
                            // TODO: 16/9/12 打开浏览器
                            Uri uri = Uri.parse(url);
                            Context context = widget.getContext();
                            Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                            intent.putExtra(Browser.EXTRA_APPLICATION_ID, context.getPackageName());
                            context.startActivity(intent);
                        }
                    }, urlMatcher.start(), urlMatcher.end(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
                }
            }

            //处理电话匹配
            Pattern phonePattern = Pattern.compile("[1][34578][0-9]{9}");
            Matcher phoneMatcher = phonePattern.matcher(contentStr);
            while (phoneMatcher.find()) {
                final String phone = phoneMatcher.group();
                if (!TextUtils.isEmpty(phone)) {
                    sp.setSpan(new SpannableClickable() {
                        @Override
                        public void onClick(View widget) {
                            Context context = widget.getContext();
                            //用intent启动拨打电话
                            Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + phone));
                            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            context.startActivity(intent);
                        }
                    }, phoneMatcher.start(), phoneMatcher.end(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    } else {
        sp = new SpannableStringBuilder();
    }
    return sp;
}
展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部