1. 程式人生 > >Android學習之TextView顯示html圖片的方法

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();

最終效果:

這裡寫圖片描述