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

今天在使用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();

最终效果:

你可能感兴趣的:(html,android,图片,textview)