首页 > 解决方案 > 如何将 HTML 解析为带有样式的文本

问题描述

我正在使用 Xamarin Android 构建一个应用程序,我想将 HTML 转换为普通格式,例如:

HTML 代码

<p><strong>Lorem ipsum</strong> is placeholder text <strong><em><span style="color:#ff0000">commonly</span></em></strong> used in the graphic, print, and publishing industries for previewing layouts and visual mockups.
</p>
<p>&nbsp;</p>
<ul>
    <li>Item 1</li>
    <li>Item 2</li>
    <li>Item 3</li>
</ul>

文本

Lorem ipsum是图形、印刷和出版行业中常用的占位符文本,用于预览布局和视觉模型。

我从数据库中获取此内容,我想将帖子内容转换为带有格式的文本。

标签: c#htmlxamarin.android

解决方案


TextView 目前支持本博文中列出的以下 HTML 标记:

<a href="...">
<b>
<big>
<blockquote>
<br>
<cite>
<dfn>
<div align="...">
<em>
<font size="..." color="..." face="...">
<h1>
<h2>
<h3>
<h4>
<h5>
<h6>
<i>
<img src="...">
<p>
<small>
<strike>
<strong>
<sub>
<sup>
<tt>
<u>

如果您只想在 TextView 中显示它,那么只需执行以下操作:

TextView txtView;
txtView.TextFormatted = Html.FromHtml(HTMLFromDataSource);

如果你想使用不同的控件,那么还有其他方法可以实现这一点,但 TextView 无论如何都支持 HTML,所以如果你可以使用它,我会的。

但是值得注意的是,目前看来不支持 UL 和 LI。所以你必须使用类似的东西Html.TagHandler来告诉它做什么,这是一个Java实现:

public class UlTagHandler implements Html.TagHandler{
    @Override
    public void handleTag(boolean opening, String tag, Editable output,
                          XMLReader xmlReader) {
            if(tag.equals("ul") && !opening) output.append("\n");
            if(tag.equals("li") && opening) output.append("\n\t•");
    }
}

textView.setText(Html.fromHtml(myHtmlText, null, new UlTagHandler()));

您应该能够将其转换为 Xamarin 的 C#。


推荐阅读