gpt4 book ai didi

Android 样式特定 TextView 中的 html 标签

转载 作者:行者123 更新时间:2023-11-30 03:33:18 26 4
gpt4 key购买 nike

我有一段要突出显示的 HTML。它不是一段预定义的文本,因此它必须是动态的。

我有一个 SpannableString有很多 html,但我想设置 <pre> 的样式标签和 <code>标签。我可以使用一些标准的 Java API 或 Android API 来做到这一点,还是我必须使用某种正则表达式来匹配这些标签?

我试过这样的:

public static void styleSpans(String markdownString) {
Spannable raw = new SpannableString(markdownString);
BackgroundColorSpan[] spans = raw.getSpans(0, raw.length(), BackgroundColorSpan.class);

for (BackgroundColorSpan span : spans) {
raw.removeSpan(span);
}

int index = TextUtils.indexOf(raw, "<pre>");
}

并用这些标签的索引做一些事情,但我需要一个例子来了解我实际上在做什么。我怎么能这样做?

最佳答案

正则表达式是执行此操作的一种方法。

Matcher matcher = Pattern.compile("<pre>(.+?)</pre>", Pattern.DOTALL).matcher(markdownString);
// use matcher object to construct Spannable

或者,类 android.text.Html有方法fromHtml(String, Html.ImageGetter, Html.TagHandler)但它会将所有可以转换的标签转换为 Spans。标签 <pre><code>不受支持,因此它们被传递给 android.text.Html.TagHandler.handleTag(boolean, String, Editable, XMLReader)你必须覆盖它。您可以在那里添加适当的跨度,甚至可以自己添加额外的文本。学习如何将对不同标签的支持写入 handleTag 的最佳位置可能是内部类的源代码 android.text.Html.HtmlToSpannedConverter .在您的情况下,这似乎太重了,因为您需要剥离大量 Span 才能以纯文本形式显示所有其他标签。

第三个选项是使用 SAX 解析器。我认为这是最好的选择,它在内部使用 Html.fromHtml() .这是一个教程:http://www.verious.com/tutorial/android-sax-parsing-example/ .在仅定义 <pre> 的位置创建处理程序和 <code> .解析器应该使用这些标签并告诉您标签何时开始(这样您就可以标记 Span 的开始),它会为您提供标签的内容,最后告诉您标签何时结束(在那里关闭您的 Span)。对于所有其他标签,只需将内容附加到 Spannable

关于Android 样式特定 TextView 中的 html 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17053904/

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