Android TextView 显示 HTML

在Android开发中,TextView是我们经常使用的一个控件,用于显示文本内容。然而,默认情况下,TextView只能显示纯文本,不支持显示HTML格式的文本。那么,如何在TextView中显示HTML呢?本文将介绍在Android开发中如何实现TextView显示HTML,并提供相应的代码示例。

为何需要显示HTML格式的文本?

在实际开发中,我们有时需要显示富文本内容,比如带有图片、链接、字体样式等的文本。而HTML是一种常用的富文本格式,具有灵活、易于编辑和扩展的特点。因此,将HTML格式的文本显示在TextView中,可以更好地展示内容,并丰富用户的视觉体验。

使用Html.fromHtml()方法显示HTML

Android提供了一个方便的方法Html.fromHtml(),可以将HTML格式的字符串转换为Spanned类型的文本,然后可以在TextView中显示。下面是一个示例代码:

String htmlStr = "<p>这是一段带有<strong>加粗</strong>、<em>斜体</em>和<a rel="nofollow" href=\"
Spanned spannedStr = Html.fromHtml(htmlStr);
textView.setText(spannedStr);

以上代码首先定义了一个HTML格式的字符串htmlStr,其中包含了加粗、斜体和链接等内容。然后,通过Html.fromHtml()方法将htmlStr转换为Spanned类型的文本spannedStr。最后,将spannedStr设置到TextView中,即可显示HTML格式的文本。

需要注意的是,Html.fromHtml()方法在Android N(7.0)及以上的版本已被废弃,取而代之的是HtmlCompat.fromHtml()方法。可以使用以下代码来兼容不同版本:

Spanned spannedStr;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    spannedStr = HtmlCompat.fromHtml(htmlStr, HtmlCompat.FROM_HTML_MODE_LEGACY);
} else {
    spannedStr = Html.fromHtml(htmlStr);
}
textView.setText(spannedStr);

显示图片和链接

除了基本的文本格式,有时还需要在TextView中显示图片和链接。对于图片,可以使用Html.ImageGetter接口来加载并显示。下面是一个示例代码:

Html.ImageGetter imageGetter = new Html.ImageGetter() {
    @Override
    public Drawable getDrawable(String source) {
        // 根据source加载图片,并返回Drawable对象
        Drawable drawable = getResources().getDrawable(R.drawable.image);
        drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
        return drawable;
    }
};

String htmlStr = "<p>这是一张图片:<img src=\"image\"/></p>";
Spanned spannedStr = HtmlCompat.fromHtml(htmlStr, HtmlCompat.FROM_HTML_MODE_LEGACY, imageGetter, null);
textView.setText(spannedStr);

以上代码通过实现Html.ImageGetter接口,并重写getDrawable()方法来加载图片。在Html格式的字符串中,通过<img src="image"/>标签来引用图片,其中"image"是图片的标识符。getDrawable()方法根据标识符加载相应的图片,并返回Drawable对象。最后,使用HtmlCompat.fromHtml()方法将HTML字符串转换为Spanned类型的文本,并将其设置到TextView中。

对于链接,可以使用Linkify类将文本中的URL转换为可点击的链接。下面是一个示例代码:

String htmlStr = "<p>这是一个链接:<a href=\"
Spanned spannedStr = HtmlCompat.fromHtml(htmlStr, HtmlCompat.FROM_HTML_MODE_LEGACY);
textView.setText(spannedStr);
Linkify.addLinks(textView, Linkify.WEB_URLS);

以上代码中,Html格式的字符串中使用`<a href="

总结

通过使用Html.fromHtml()(或HtmlCompat.fromHtml())方法,可以在Android开发中实现TextView显示HTML格式的文本。我们可以将HTML字符串转换为Spanned类型的文本,并将其设置到TextView