Skip to content

TextView 显示html

假设我们有一段html文本,要显示像浏览器一样的效果。 对于简单的html文本,我们可以使用TextView来显示。

使用

上手很简单,使用Html.fromHtml()把html文本转换再交给setText

html文本如下,这里指定“color”文字为红色。

<p>Tell me the <font color="red">color</font></p>

浏览器显示效果:

Tell me the color

Java中需要对双引号转义一下。

private static final String T1 = "<p>Tell me the <font color=\"red\">color</font></p>";

tv1.setText(Html.fromHtml(T1));

手机上显示效果。

效果图

默认支持的标签

Html.fromHtml()支持一些标签,例如<font> <p> 等等。 但是不支持style。 例如下面这段html文本,标签中带有style(内联样式)。

<p>Tell me the <text style="color: blue; font-weight: bold;">color</text>.</p>

浏览器显示效果:

Tell me the color.

Java代码。

private static final String H1 = "<p>Tell me the <text style=\"color: blue; font-weight: bold;\">color</text>.</p>";

tv2.setText(Html.fromHtml(H1));

手机显示效果如下

效果图

可以看到html中style指定的字体颜色和加粗并没有显示出来。

要想让它正常显示,需要改为

<p>Tell me the <b><font color="blue">color</font></b>.</p>

浏览器效果如下

Tell me the color.

Java代码

private static final String H1_FIX = "<p>Tell me the <b><font color=\"blue\">color</font></b>.</p>";
tv3.setText(Html.fromHtml(H1_FIX));

可以看出,支持<p> <b> <font>标签。据不完全统计,支持的标签如下。

p
ul
li
div
span
strong
b
em
cite
dfn
i
big
small
font
blockquote
tt
a
u
del
s
strike
sup
sub
h1
h2
h3
h4
h5
h6
img
br

目前很多html中都使用了内联样式,而且前端开发中不赞成使用<font>标签。 但Html.fromHtml中的默认转换器并不支持内联样式。这样前端写的html文本,放在Android TextView上就失去了很多显示效果。 可以考虑使用WebView加载Html文本