TextView使用ClickableSpan点击空白处也响应点击事件

1、ClickableSpan的使用

        下面方法给字符串中数字添加点击事件:

private SpannableString spannableText(String text){
        if(TextUtils.isEmpty(text)){
            return SpannableString.valueOf("");
        }
        Pattern p = Pattern.compile("(120)|(110)|(119)|(122)|(114)|(121)|(999)|([0-9]{5,13})");
        Matcher m = p.matcher(text);
        SpannableString temp = new SpannableString(text);
        int textColor = getResources().getColor(R.color.colorTheme);
        while (m.find()){
            int start = m.start();
            int end = m.end();
            String tel = m.group();
            ForegroundColorSpan colorSpan = new ForegroundColorSpan(textColor);
            temp.setSpan(colorSpan,start,end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            ClickableSpan clickableSpan = new ClickableSpan() {
                @Override
                public void onClick(@NonNull View widget) {
                    dialPhone(tel);
                }

                @Override
                public void updateDrawState(@NonNull TextPaint ds) {
                    ds.setUnderlineText(true);
                }
            };
            temp.setSpan(clickableSpan,start,end,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
        return temp;
    }

2、问题

例如,字符串是“姓名:张三\r\n电话:11111111111\r\n性别:男\r\n亲属电话:22222222222”。

问题:使用上面方法添加点击事件后,会发现点击数字后的空白地方,也会执行点击事件。

解决方法:在可能出现空白区域的字符串后添加一个空格字符“\u3000”,即可解决问题。

例如,上面字符串修改后即是:“姓名:张三\r\n电话:11111111111\u3000\r\n性别:男\r\n亲属电话:22222222222\u3000”

猜你喜欢

转载自blog.csdn.net/aianzxy/article/details/120553916