我有一个TextView
通过调用它得到它的数据集:
tv.setText(Html.fromHtml(myText));
Run Code Online (Sandbox Code Playgroud)
该字符串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());
Run Code Online (Sandbox Code Playgroud)
这不能正常工作.这意味着它处理字体标记但Linkify不会UrlSpan
正确转换网址.
或者,如果我在没有Html.fromHtml(..)的情况下调用setText(),Linkify可以工作,但是我会丢失所有从html字体标签格式化的文本.不知怎的,他们似乎都是冲突的,我只能有一个或另一个.
现在这是我不理解的有趣部分.如果我从java中删除Linkify代码并转到我的布局xml并在其中放置以下行,所有似乎都在工作(Linkify和fromHtml最终一起玩得很好......不知何故)
<TextView
...
android:autoLink="all"
android:linksClickable="true"
...
/>
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释为什么会让一切正常吗?
我查看了TextView的源代码,setMovementMethod()
最终调用:
setFocusable(true);
setClickable(true);
setLongClickable(true);
Run Code Online (Sandbox Code Playgroud)
理论上,这应该使一切工作和行为与xml布局代码相同.我尝试在java代码中切换Linkify.addLinks(..)
之前调用的顺序setText(Html.fromHtml(..))
,但这并没有什么区别.
关于为什么在java中组合Linkify.addLinks()和Html.fromHtml()的任何想法会导致这种行为......但不是在xml布局中?