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

原创 2016年06月02日 11:43:38

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

最终效果:

这里写图片描述

版权声明:本文为博主原创文章,码字不易,转载请注明原文地址,谢谢。

相关文章推荐

Toolbar在WebView滚动下的显示和隐藏的实现

大家都是视觉党,看看是否是你要的实现效果!!效果图如下 要实现这种效果,首先要导入向下兼容的包,然后在利用Google原生的组件即可实现你需要的效果!!在以前的谷歌大会上,Google升级了新的Sup...

android webView.loadData乱码解决

webView.getSettings().setDefaultTextEncodingName("UTF -8");//设置默认为utf-8 webView.loadData(htmlDat...
  • catoop
  • catoop
  • 2014-06-13 17:09
  • 15419

WebView loadData出错(奇怪的设计)

今天遇到一个奇怪的问题。 我使用WebView加载一个网页。  方法1. 直接使用 loadUrl() 方法,没有问题。完全可以。 方法2. 使用loadData()方法,出现问题,无法显示。 ...

我的Android笔记(九)—— TextView显示html图片的方法

TextView是不只可以String的,我们平常用的给setText()方法传递String参数的时候,其实是调用的public final void setText (CharSequence t...

UI--多行文本折叠展开效果

经常在APP中能看到有引用文章或大段博文的内容,他们的展示样式也有点儿意思,默认是折叠的,当你点击文章之后它会自动展开。再次点击他又会缩回去。   网上有找到部分效果,感觉不是很满意。最后自己尝试用 ...

The Handler class should be static or leaks might occur.

首先解释下这句话This Handler class should be static or leaks might occur,大致意思就是说:Handler类应该定义成静态类,否则可能导致内存泄露...

WebView中loadUrl 和 loadData

1、LoadUrl 直接显示网页内容(单独显示网络图片) 2、LoadData 显示中文网页内容(含空格的处理) APK 包内文件 1、LoadUrl 显示APK 中Html 和图片文件 2、...

Android应用开发allowBackup敏感信息泄露的一点反思

其实这篇文章可能有些小题大作,但回过头想想还是很有必要的,有点阴沟里翻船的感觉。相信大家都知道Android API Level 8开始提供了为应用程序备份和恢复数据的功能,此功能的开关可以通过应用程...

Android 蓝牙开发(一)蓝牙通信

随着可穿戴设备的流行,研究蓝牙是必不可少的一门技术了。 总结了下蓝牙开发使用的一些东西分享一下。 首先需要AndroidManifest.xml文件中添加操作蓝牙的权限。 允许程序连接到已配对...

详解Android App AllowBackup配置带来的风险

http://www.91ri.org/12500.html 详解Android App AllowBackup配置带来的风险 前言 笔者在使用自己编写的 Drozer ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)