我正在尝试使用textview来处理超链接和电话号码。说我的文字是:
"555-555-555, www.google.com, <a href="www.google.com">Google!</a>"
如果我在此字符串上运行Html.fromHtml(),那么TextView会显示Google!正确地作为可点击链接而不是其他两个链接。
如果我在TextView上运行Linkify.addLinks(TextView,Linkify.All),那么前两个被正确识别为电话号码和网址,但html不会在最后一个处理。
如果我同时运行它们,那么其中一个或另一个都被尊重,但不能同时进行。 (Html.fromHtml将删除那里的html标签,但如果在之后调用linkify则不会是链接)
关于如何让这两个功能同时工作的任何想法?所以所有链接都正确处理?谢谢!
编辑:此外,文本会动态更改,因此我不确定如何为此设置Linkify模式。
答案 0 :(得分:5)
这是因为Html.fromHtml
和Linkify.addLinks
在处理文本之前删除了之前的跨度。
使用此代码使其正常工作:
public static Spannable linkifyHtml(String html, int linkifyMask) {
Spanned text = Html.fromHtml(html);
URLSpan[] currentSpans = text.getSpans(0, text.length(), URLSpan.class);
SpannableString buffer = new SpannableString(text);
Linkify.addLinks(buffer, linkifyMask);
for (URLSpan span : currentSpans) {
int end = text.getSpanEnd(span);
int start = text.getSpanStart(span);
buffer.setSpan(span, start, end, 0);
}
return buffer;
}
答案 1 :(得分:1)
尝试在textview上设置移动方法,而不是使用Linkify:
textView.setMovementMethod(LinkMovementMethod.getInstance());
答案 2 :(得分:0)
在TextView的xml布局中,您应添加以下内容:
android:autoLink="all"
android:linksClickable="true"
然后你应该用Java删除你的Linkify代码。
它以某种方式工作,但我不知道为什么。我添加了一个问题,看看是否有人可以解释这种行为:Using Linkify.addLinks combine with Html.fromHtml