RichText

介绍:

一个用TextView实现的富文本控件,可以显示html代码,并且支持图片点击事件与链接自动回调。代码很简单,但是不容易想到。

运行效果:

使用说明:

简单介绍一下原理。

TextView本身不能显示html文本。但是Html类可以将html代码格式化成span的形式。

Html.fromHtml(mRichText, httpImgGetter, null)

所以在TextView中可以这样显示html代码:

setText(Html.fromHtml(mRichText, httpImgGetter, null));

其中httpImgGetter是一个专门处理html代码中img标签的接口:Html.ImageGetter。

public static interface ImageGetter {
    /**
     * This methos is called when the HTML parser encounters an
     * <img> tag.  The <code>source</code> argument is the
     * string from the "src" attribute; the return value should be
     * a Drawable representation of the image or <code>null</code>
     * for a generic replacement image.  Make sure you call
     * setBounds() on your Drawable if it doesn't already have
     * its bounds set.
     */
    public Drawable getDrawable(String source);
}

实现了Html.ImageGetter的getDrawable()方法就能根据图片地址自己加载图片,可以用picasso之类的图片加载库来加载。

但是一般我们除了需要显示html内容之外,往往还需要让里面的元素响应用户的点击行为,比如超链接和图片的点击。

这就是这个库的技巧所在。

其中的关键代码是:

ImageSpan\[\] imageSpans = spannableStringBuilder.getSpans(0, spannableStringBuilder.length(), ImageSpan.class);

找出所有ImageSpan然后遍历。

已下载
0