需求:
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>