Android學習之TextView顯示html圖片的方法
阿新 • • 發佈:2019-02-12
今天在使用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();
最終效果: