将Linkify.addLinks与Html.fromHtml结合使用

我有一个TextView ,通过调用它来获取数据集:

 tv.setText(Html.fromHtml(myText)); 

stringmyText包含部分格式化的html数据。 例如,它可能有字体标签,但没有使用<a href=...>标签格式化的任何url链接。 我希望使用Linkify.addLinks(...)来做到这一点,因为我的文本可能包括Linkify将适当地转换为我的其他types的链接。 所以我写了我的代码看起来像这样:

 String myText = "<font color=\"red\">Red text</font> and Url: www.google.com"; tv.setText(Html.fromHtml(myText)); Linkify.addLinks(tv, Linkify.ALL); tv.setMovementMethod(LinkMovementMethod.getInstance()); 

这不能正常工作。 这意味着它处理的字体标签,但Linkify不会正确地转换UrlSpanUrlSpan

或者,如果我没有Html.fromHtml(..)调用setText(),Linkify的作品,但后来我失去了所有格式的HTML字体标签。 不知何故,他们似乎是相互冲突的,我只能有一个或另一个。

现在这里是我不明白的有趣的部分。 如果我从Link中删除Linkify代码,并进入我的布局xml,并把下面的行放在那里,所有似乎都工作(Linkify和fromHtml最终一起玩好…不知何故)

 <TextView ... android:autoLink="all" android:linksClickable="true" ... /> 

有人可以向我解释为什么会使一切工作?

我查看了TextView的setMovementMethod()的源代码,并最终调用:

 setFocusable(true); setClickable(true); setLongClickable(true); 

这应该理论上使所有的工作和行为一样的XML布局代码。 我尝试在Java代码中的setText(Html.fromHtml(..)) Linkify.addLinks(..)之前切换调用Linkify.addLinks(..)的顺序,但这没有什么区别。

任何关于为什么在java中结合Linkify.addLinks()和Html.fromHtml()的想法会导致这种行为…但不是在xml布局?

Solutions Collecting From Web of "将Linkify.addLinks与Html.fromHtml结合使用"

这是因为Html.fromHtmlLinkify.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; } 

你可以试试这个:

首先将文本设置到您的TextView中。

 tv.setText(myText); 

使用Linkify转换链接

 Linkify.addLinks(tv, Linkify.ALL); 

最后用Html.fromHtmlreplace文本,但使用EditText中的Linkified文本。

 tv.setText(Html.fromHtml(tv.getText().toString()));