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>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值