zoukankan      html  css  js  c++  java
  • TextView中实现可点击链接的显示

      开发的过程中会有这么一个需求:在一段话中包含有若干个链接,程序能识别出链接并突出显示,不能有下划线,用指定颜色,点击后打开webview并跳转到该网页

      主要包括以下几个内容:

      1、识别链接url,用正则表达式做。

      2、突出显示,继承重写ClickableSpan

      3、跳转需重写ClickableSpan里面的onClick事件

    ClickableSpan重写如下:

    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的正则表达式:

    Pattern pattern = Pattern.compile("[http|https]+[://]+[0-9A-Za-z:/[-]_#[?][=][.]]*", Pattern.CASE_INSENSITIVE);
    Matcher m = pattern.matcher(string);

      然后是找出所有的url,并设置ClickableSpan替换

    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对象。

  • 相关阅读:
    HTML5 文件上传
    Vue-Router模式、钩子
    网络基础协议随笔
    Vue-Router基础使用
    vue中mixin的一点理解
    纯css3跑马灯demo
    Charles使用笔记
    提个醒。。。
    本机未装Oracle数据库时Navicat for Oracle 报错:Cannot create oci environment 原因分析及解决方案
    easyUI datagrid 清空
  • 原文地址:https://www.cnblogs.com/txlbupt/p/3465847.html
Copyright © 2011-2022 走看看