android:使用TextView实现网页图文混排效果

2015年12月25日 Android 暂无评论 阅读1779次

android:使用TextView实现网页图文混排效果


新闻资讯问答博客等类型的网站在web中就表现出很丰富的现实效果,比如图片文字混合等。因此,此类网站在其对应的APP页面中,也应该是很友好的展示出图文混排效果。


在AndroidAPP中实现图文混排效果有多种办法,本文介绍的是使用TextView来实现图文混排效果


  1. 想实现网页那种图文混排,则首先要获取原来的HTML源码,这是属于网络请求接口返回的内容。

  2. 得到了原始网页的HTML,可以调用android.text.Html的如下方法
    public static Spanned fromHtml(String source, ImageGetter imageGetter, TagHandler tagHandler)
    从而得到Spanned对象

  3. 在android.widget.TextView源码中,有如下设置Text的方法
    public final void setText(CharSequence text)

  4. android.text.Spanned有如下的定义
    public interface Spanned extends CharSequence

  5. 根据3和4点可以知道调用TextView#setText(Spanned)就可以看到预期的效果

private TextView mTextView;
ImageGetter imgGetter = new Html.ImageGetter() {
    @Override
    public Drawable getDrawable(String source) {
        Drawable drawable = null;
        URL url;
        try {
            url = new URL(source);
            drawable = Drawable.createFromStream(url.openStream(), "");
        } catch (MalformedURLException e) {
            L.e("MalformedURLException: " + source, e);
        } catch (IOException e) {
            L.e("IOException: " + source, e);
        }
        if (drawable != null) {
            drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),
                    drawable.getIntrinsicHeight());
        }
        return drawable;
    }
};
private Spanned getSpanedText(String originalHtmlTxt) {
    Spanned result = Html.fromHtml(originalHtmlTxt);
    int length = result.length();
    ImageSpan[] imgSpans = result.getSpans(0, length, ImageSpan.class);
    for (int i = 0; i < imgSpans.length; i++) {
        ImageSpan is = imgSpans[i];
        Class<ImageSpan> clz = ImageSpan.class;
        try {
            Field field = clz.getDeclaredField("mDrawable");
            field.setAccessible(true);
            field.set(is, mTextView.getContext().getResources()
                .getDrawable(R.drawable.ic_img_not_ready));
        } catch (NoSuchFieldException e) {
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (NotFoundException e) {
            e.printStackTrace();
        }
    }
    result = Html.fromHtml(originalHtmlTxt, imgGetter, null);
    return result;
}
mTextView.setText(result);



最后说明的是getSpanedText()因为涉及网络图片读取,所以要放到子线程中异步处理。

至此,android:使用TextView实现新闻博客资讯等网页图文混排效果的介绍就结束了。
以后会继续分享用其他方法实现新闻博客资讯等APP中地网页图文混排效果。

分享本文至:

WRITTEN BY

avatar
本文标签:TextView
看了本文是不是觉得很赞,那就赶紧点击下面按钮分享给身边的朋友吧!

欢迎留言




用户登录

sitemap