您的位置:首页 > 移动开发 > Android开发

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

2016-06-02 11:43 786 查看
今天在使用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();


最终效果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android html 图片 textview