Android TextView 文字中插入超链接且自定义点击事件

需求:

1:显示一段中间带有超链接的字符串,超链接部分可以点击,且需要自定义点击事件

2:该字符串需要使用40多种国家语言进行翻译

分析:

很多朋友第一时间想到使用Spannable来实现富文本显示

但是单纯构建Spannable的方式无法解决40个国家不同语言的问题

我们也不太可能为每个国家构建不同的Spannable,这样工作量太大,就算能写出来,后面也不好维护

思路:

优先还是想着这个字符串40种不同国家语言还是使用string.xml进行维护

通过在string.xml里面定义富文本字符串,java代码中转换为spannable 再对spannable进行处理,统一替换里面的跳转

这里提供一个方法 具体见如下代码

        CharSequence s = getContext().getText(R.string.xxxxxxx);
        Spannable text = Spannable.Factory.getInstance().newSpannable(s);
        if (text instanceof Spannable) {
            int end = text.length();
            URLSpan[] urls = text.getSpans(0, end, URLSpan.class);
            SpannableStringBuilder style = new SpannableStringBuilder(text);
            style.clearSpans();
            for (final URLSpan url : urls) {
                // 设置Span
                style.setSpan(new ClickableSpan() {
                    @Override
                    public void onClick(View widget) {
                       //这里实现自己的跳转逻辑
                    }
                    
                    @Override
                    public void updateDrawState(TextPaint ds) {
                        super.updateDrawState(ds);
                    }
                }, text.getSpanStart(url), text.getSpanEnd(url), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            }
            mMessageView.setMovementMethod(LinkMovementMethod.getInstance());
            mMessageView.setText(style);
        }
	<string name="xxxxxxxx">
        该功能需要获取您的地理位置信息,需要您同意
        <a href="">隐私政策</a>
		之后才能使用
        </string>
发布了24 篇原创文章 · 获赞 3 · 访问量 6140

猜你喜欢

转载自blog.csdn.net/binghelonglong123/article/details/89183582