关闭

Android学习之TextView显示html图片的方法

标签: androidhtml图片textview
662人阅读 评论(0) 收藏 举报
分类:

今天在使用TextView显示html图片的时候,发现图片展示不出来,因为有很多html标记是不支持的,只支持一部分,效果如下:

这里写图片描述

文字效果有,但是图片出不来

要实现图片的显示需要使用Html.fromHtml的另外一个重构方法:
public static Spanned fromHtml (String source, Html.ImageGetter imageGetter, Html.TagHandler tagHandler)
其中Html.ImageGetter是一个接口,我们要实现此接口,在它的getDrawable(String source)方法中返回图片的Drawable对象才可以。

Spanned sp = Html.fromHtml(html, new Html.ImageGetter() {  
    @Override  
    public Drawable getDrawable(String source) {  
        InputStream is = null;  
        try {  
            is = (InputStream) new URL(source).getContent();  
            Drawable d = Drawable.createFromStream(is, "src");  
            d.setBounds(0, 0, d.getIntrinsicWidth(),  
                    d.getIntrinsicHeight());  
            is.close();  
            return d;  
        } catch (Exception e) {  
            return null;  
        }  
    }  
}, null);  
textView.setText(sp); 

要点:添加网络权限

<uses-permission android:name="android.permission.INTERNET" />  

但是要直接这么用会出异常,因为主线程中不能做耗时操作,所以要开线程运行。

  new Thread(new Runnable() {
            @Override
            public void run() {
                final Spanned sp = Html.fromHtml(html, new Html.ImageGetter() {
                    @Override
                    public Drawable getDrawable(String source) {
                        InputStream is = null;
                        try {
                            is = (InputStream) new URL(source).getContent();
                            Drawable d = Drawable.createFromStream(is, "src");
                            d.setBounds(0, 0, d.getIntrinsicWidth(),
                                    d.getIntrinsicHeight());
                            is.close();
                            return d;
                        } catch (Exception e) {
                            return null;
                        }
                    }
                }, null);
//方式一
                getActivity().runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        tv_test.setText(sp);
                    }
                });
//方式二
            /*    tv_test.post(new Runnable() {
                    @Override
                    public void run() {
                        tv_test.setText(sp);
                    }
                });*/

            }

        }).start();

最终效果:

这里写图片描述

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:230310次
    • 积分:3324
    • 等级:
    • 排名:第10173名
    • 原创:109篇
    • 转载:5篇
    • 译文:0篇
    • 评论:118条
    最新评论