【发布时间】:2013-01-10 09:06:24
【问题描述】:
我有一个TextView,通过调用它来获取它的数据集:
tv.setText(Html.fromHtml(myText));
字符串myText 包含部分格式化的html 数据。例如,它可能有字体标签,但没有任何使用<a href=...> 标签格式化的 url 链接。我希望使用Linkify.addLinks(...) 来做到这一点,因为我的文本可能包含 Linkify 会为我适当转换的其他类型的链接。所以我把我的代码写成这样:
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 不会将 url 正确转换为 UrlSpan。
或者,如果我在没有 Html.fromHtml(..) 的情况下调用 setText(),Linkify 可以工作,但是我会丢失所有从 html 字体标签格式化的文本。不知何故,它们似乎都有冲突,而我只能选择其中一个。
现在这是我不明白的有趣部分。如果我从 java 中删除 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(..)的顺序,但这并没有什么不同。
关于为什么在 java 中结合 Linkify.addLinks() 和 Html.fromHtml() 会导致这种行为的任何想法......但不会在 xml 布局中?
【问题讨论】:
-
@gmazzo 答案工作正常,应该被接受:stackoverflow.com/a/17201376/2068732