gpt4 book ai didi

java - 使用 Linkify.addLinks 结合 Html.fromHtml

转载 作者:太空狗 更新时间:2023-10-29 13:23:08 24 4
gpt4 key购买 nike

我有一个 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 布局代码相同。我尝试切换调用顺序 Linkify.addLinks(..)之前setText(Html.fromHtml(..))在 Java 代码中,但这并没有什么不同。

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

最佳答案

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

关于java - 使用 Linkify.addLinks 结合 Html.fromHtml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14538113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com