Android TextView 自定义识别文本中的超链接并打开自身WebView(按照微信效果实现)

在开发项目中,遇到一个需求,需要做到微信那种,在文本中自定识别链接,然后点击打开内部自身实现的WebView。

参考了一些网上的案例,但发现都满足不了微信的那种效果,于是自己研究了下相关知识点,用了两种办法实现微信

的这种效果。 以下附上两种实现思路的代码,代码写的匆忙,如有大神发现优化之处,可提出。


方法一:

//利用正则识别

 private CharSequence checkAutoLink(String content) {

        String url = "百度 https://www.baidu.com/,腾讯 http://www.qq.com/,淘宝 www.taobao.com/";//此处测试,就不用参数了

        SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(url);

        Pattern pattern = Pattern.compile("([\\s>])([\\w]+?://[\\w\\\\x80-\\\\xff\\#$%&~/.\\-;:=,?@\\[\\]+]*)");

        Matcher matcher = pattern.matcher(spannableStringBuilder);

        while (matcher.find()) {

            setClickable(spannableStringBuilder, matcher);

        }

        Pattern pattern2 = Pattern.compile("([\\s>])((www|ftp)\\.[\\w\\\\x80-\\\\xff\\#$%&~/.\\-;:=,?@\\[\\]+]*)");

        matcher.reset();

        matcher = pattern2.matcher(spannableStringBuilder);

        while (matcher.find()) {

            setClickableSpan(spannableStringBuilder, matcher);

        }

        return spannableStringBuilder;

    }


//给符合的设置自定义点击事件

private void setClickableSpan (final SpannableStringBuilder clickableHtmlBuilder, final Matcher matcher) {

        int start = matcher.start();

        int end = matcher.end();

        final String url = matcher.group();

        ClickableSpan clickableSpan = new ClickableSpan() {

            public void onClick(View view) {

                Intent intent = new Intent(context, WebViewActivity.class);

                intent.putExtra("url", url);

                startActivity(intent);

            }

        };

        clickableHtmlBuilder.setSpan(clickableSpan, start, end, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);

    }


在TextView处不必设置autolink,只设置

 setAutoLinkTextColor(getResources().getColor(R.color.link_color));//如保持系统风

 setMovementMethod(LinkMovementMethod.getInstance()); 这两处即可。



方法二:

优化网上的一些实现方法,代码就不贴了,大概实现思路 :

网上很多Demo都是将文本html格式化,然后利用UrlSpan匹配出相应的结果,在相应的结果中做自定义点击事件处理

但在实际操作当中,很多文本没有html标签,UrlSpan匹配不出结果,所以应当先采用方法一利用正则匹配出相应结果,然后将结果替换带有html 超链接标签的字符串。

再将该整个文本html格式化。


个人建议使用方法一。


  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值