Android TextView显示富文本

在Android应用开发中,TextView是常用的控件之一,用于显示文本内容。但有时候我们希望在TextView中显示富文本,即文本中包含样式、链接或图片等。本文将介绍如何在Android中使用TextView显示富文本,并提供相关的代码示例。

富文本介绍

富文本(Rich Text)是指在文本中添加额外的样式、链接或图片等丰富内容。在Android中,我们可以使用HTML标签来定义富文本内容。例如,我们可以使用<b>标签来加粗文本,使用<i>标签来斜体文本,使用<a>标签来添加链接等。

使用Html类解析富文本

Android提供了Html类,可以用于解析包含HTML标签的文本。我们可以使用Html类的fromHtml()方法将富文本内容转换为Spanned对象,然后将其设置给TextView。

下面是一个使用Html类显示富文本的示例代码:

String htmlContent = "<b>加粗文本</b>,<i>斜体文本</i>,<a rel="nofollow" href=\"
Spanned spannedText = Html.fromHtml(htmlContent, Html.FROM_HTML_MODE_COMPACT);
textView.setText(spannedText);

在上面的示例中,我们定义了一个包含加粗文本、斜体文本和链接的HTML字符串。然后,使用Html类的fromHtml()方法将其转换为Spanned对象,最后将Spanned对象设置给TextView。

需要注意的是,fromHtml()方法的第二个参数Html.FROM_HTML_MODE_COMPACT用于指定解析模式。在Android N及以上版本中,可以使用该参数来指定解析模式为COMPACT,以获得更好的性能和兼容性。

显示图片

除了显示样式和链接外,有时候我们还希望在TextView中显示图片。Android中,我们可以使用<img>标签来插入图片。但是,默认情况下,TextView并不支持显示图片,我们需要自定义Drawable来实现。

下面是一个使用自定义Drawable显示图片的示例代码:

String htmlContent = "显示图片:<br><img src=\"file:///android_asset/image.jpg\">";
Spanned spannedText = Html.fromHtml(htmlContent, Html.FROM_HTML_MODE_COMPACT, new Html.ImageGetter() {
    @Override
    public Drawable getDrawable(String source) {
        Drawable drawable = null;
        try {
            InputStream is = getAssets().open("image.jpg");
            drawable = Drawable.createFromStream(is, null);
            drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return drawable;
    }
}, null);
textView.setText(spannedText);

在上面的示例中,我们定义了一个包含图片的HTML字符串。然后,使用Html类的fromHtml()方法将其转换为Spanned对象。在转换过程中,我们实现了Html.ImageGetter接口,重写了getDrawable()方法,该方法用于加载图片并返回自定义的Drawable对象。最后,将Spanned对象设置给TextView。

需要注意的是,上述示例中的图片路径是通过file:///android_asset/指定的,表示图片位于assets目录下。实际应用中,如果图片来自网络,我们可以通过网络请求加载图片,并返回Drawable对象。

总结

通过使用Html类,我们可以轻松地实现在Android中使用TextView显示富文本。我们可以使用HTML标签来定义样式、链接或图片等丰富内容,并使用fromHtml()方法将其转换为Spanned对象,然后将其设置给TextView。

希望本文对你理解Android TextView显示富文本有所帮助。

类图

下面是本文中涉及到的相关类的类图:

classDiagram
    class TextView{
        -CharSequence mText
        +setText(CharSequence text)
    }
    class Html{
        +Spanned fromHtml(String source, int flags, Html.ImageGetter imageGetter, Html.TagHandler tagHandler)
    }
    class Html.ImageGetter{
        +Drawable getDrawable(String source)
    }
    class Drawable{
        -int mIntrinsicWidth
        -int mIntrinsicHeight
        +setBounds(int left, int top, int right, int bottom)
    }