android中的Html.fromHtml能够用来载入HTML的内容。fromHtml有三个參数须要设置,第一个是要显示的html内容,第二个就是要说的重点,ImageGetter,用来处理图片载入的,第三个 TagHandler能够设置为null。接下来我们来解说下ImageGetter。网上非常多的方法都是直接引用本地的图片。是同步的,比方:

private ImageGetter imageGetter = new ImageGetter() {
@Override
public Drawable getDrawable(String source) {
String f = pic_path.substring(0, 1);
String url = pic_path.substring(2);
if (f.equals("1")) {
try {
ContentResolver cr = getActivity().getContentResolver();
Uri uri = Uri.parse(url);
Bitmap bitmap = getimage(cr, uri);
return getMyDrawable(bitmap);
} catch (Exception e) {
e.printStackTrace();
return null;
}
} else {
return null;
}
}
};

上面的代码是我做的一个项目里面用到的引用本地图片的方法,重写imagegetter,然后用ContentResolver来读取图片转换为Bitmap,然后再进行显示。但是。非常多时候会我们都须要引用的是网络图片的。那这种方法即可不通了。查找了非常多资料。假设直接在里面用异步的方法来载入图片的话。显示出来的是一个正方形的点的。那么问题来了,我们应该怎么去载入网络图片呢?

首先。我们先创建一个URLDrawable,让它去继承BitmapDrawable,重写draw方法,这个有什么用呢?这个能够让你载入图片的时候显示初始的图片,也就是载入中的图片。

URLDrawable.java:

public class URLDrawable extends BitmapDrawable {
// the drawable that you need to set, you could set the initial drawing
// with the loading image if you need to
protected Drawable drawable; @Override
public void draw(Canvas canvas) {
// override the draw to facilitate refresh function later
if(drawable != null) {
drawable.draw(canvas);
}
}
}

接下来就是重写ImageGetter

URLImageParser继承ImageGetter

放源代码

URLImageParser.java

public class URLImageParser implements ImageGetter {
Context c;
EditText container; /***
* 构建URLImageParser将运行AsyncTask,刷新容器
* @param t
* @param c
*/
public URLImageParser(EditText t, Context c) {
this.c = c;
this.container = t;
} public Drawable getDrawable(String source) {
URLDrawable urlDrawable = new URLDrawable(); // 获得实际的源
ImageGetterAsyncTask asyncTask =
new ImageGetterAsyncTask( urlDrawable); asyncTask.execute(source); //返回引用URLDrawable我将改变从src与实际图像标记
return urlDrawable;
} public class ImageGetterAsyncTask extends AsyncTask<String, Void, Drawable> {
URLDrawable urlDrawable; public ImageGetterAsyncTask(URLDrawable d) {
this.urlDrawable = d;
} @Override
protected Drawable doInBackground(String... params) {
String source = params[0];
return fetchDrawable(source);
} @Override
protected void onPostExecute(Drawable result) {
// 设置正确的绑定依据HTTP调用的结果
Log.d("height",""+result.getIntrinsicHeight());
Log.d("width",""+result.getIntrinsicWidth());
urlDrawable.setBounds(0, 0, 0+result.getIntrinsicWidth(), 0+result.getIntrinsicHeight()); // 改变当前可提取的參考结果从HTTP调用
urlDrawable.drawable = result; // 绘制图像容器
URLImageParser.this.container.invalidate(); // For ICS
URLImageParser.this.container.setHeight((URLImageParser.this.container.getHeight() + result.getIntrinsicHeight())); // Pre ICS
URLImageParser.this.container.setEllipsize(null);
} /***
* 得到Drawable的URL
* @param urlString
* @return
*/
public Drawable fetchDrawable(String urlString) {
try {
InputStream is = fetch(urlString);
Drawable drawable = Drawable.createFromStream(is, "src");
drawable.setBounds(0, 0, 0 + drawable.getIntrinsicWidth(), 0
+ drawable.getIntrinsicHeight());
return drawable;
} catch (Exception e) {
return null;
}
} private InputStream fetch(String urlString) throws MalformedURLException, IOException {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet request = new HttpGet(urlString);
HttpResponse response = httpClient.execute(request);
return response.getEntity().getContent();
}
}
}

代码里的凝视也很的清楚明了了,这里就不用反复说明了,最重要的就是要重写onPostExecute。这种方法是载入完成之后UI的刷新用的,须要对drawable进行重绘才干在EditText中显示出来。并且不会和文字的位置重叠。是不是很的简单?

Android EditText载入HTML内容(内容包括网络图片)的更多相关文章

  1. Android EditText内容监听

    监听 EditText的内容变化,作出对应的处理. MainActivity.class package com.example.edittextdemo; import android.app.Ac ...

  2. Android开发之搜芽项目的图片载入问题(使用Volley进行网络图片载入)

    搜芽的移动开发这几天进度相对来说很的快. 可是美中不足的就是网络图片的载入问题. 我有两套方案: 1)沿用迅雷动漫的图片载入.迅雷动漫也是用的一个开源的库.可是不知道是我使用出了问题还是真的是它的问题 ...

  3. Android SDK Manager无法更新,内容显示不全的解决办法

    最近在初学android开发,在更新SDK的时候遇到了麻烦. 发现Extras文件夹下为空,没有内容,包括sdk列表也不全面,更新也没有反应 解决方法: 1.在SDK Manager下Tools-&g ...

  4. 如何获取一个AlertDialog中的EditText中输入的内容

    怎么获取一个AlertDialog中的EditText中输入的内容? new AlertDialog.Builder(this)   .setTitle("请输入")   .set ...

  5. Windows Azure Marketplace 为新增的 50 个国家/地区提供,并推出了令人振奋的新增内容,包括我们自己的 Bing 光学字符识别服务

    尊敬的 Windows Azure Marketplace 用户: 我们有一些让人激动的新闻与您分享:我们现在为新增的 50 个国家/地区提供 Marketplace.自此,我们提供支持的国家/地区总 ...

  6. 解决Firefox显示“已阻止载入混合活动内容”的方法

    今天把项目放到服务器上了,调试的时候出现“已阻止载入混合活动内容……”的报错: 解决方法如下: 方法1:让Firefox暂时不阻止 打开新标签页,在地址栏输入 about:config,进入配置页面. ...

  7. Android测试(四)——内容供应器泄露

    内容供应器:用来存储和查询应用程序中的数据或来自电话的数据,所有内容供应器都具有唯一的统一的资源标识符(URI)以便被识别和查询. 内容供应期命名惯例:以content://开始 当Android A ...

  8. SpannableString 转换局部字体大小,但在EditText测量之前设置内容,测量高度为,字体变小之前的高度

    public void setHint(@NonNull String hint, @Nullable CharSequence subHint) { this.hint = hint; if (su ...

  9. 使用buffered流结合byte数组,读入文件中的内容,包括中文字符

    package com.itcast.demo05.Buffered;import java.io.BufferedInputStream;import java.io.FileInputStream ...

随机推荐

  1. PL/SQL中LOOP循环控制语句

    在PL/SQL中可以使用LOOP语句对数据进行循环处理,利用该语句可以循环执行指定的语句序列.常用的LOOP循环语句包含3种形式:基本的LOOP.WHILE...LOOP和FOR...LOOP. LO ...

  2. 【转】setTag()/getTag()

    原文网址:http://www.cnblogs.com/topcoderliu/archive/2011/06/07/2074419.html View中的setTag(Onbect)表示给View添 ...

  3. 小技巧--让JS代码只执行一次

    有时候实在是没办法,就像我这个比赛系统中,有一个弹出框,这个弹出框之外都是模糊的(这是在ajax写出弹出框时,加了一个水印). 然而遇到的问题,也是蹊跷古怪,因为这个弹出框的事件是数据查询事件,但是因 ...

  4. mysql中出现的Data truncated for column

    mysql中想一个数据库中插入一条记录时,有可能因为好多原因,会出现Data truncated for column XXXXX的错误,这是因为你的数据类型的长度不一致导致的,仔细查看一下数据类型的 ...

  5. asp.net MVC 应用程序的生命周期(上)

    首先我们知道http是一种无状态的请求,他的生命周期就是从客户端浏览器发出请求开始,到得到响应结束.那么MVC应用程序从发出请求到获得响应,都做了些什么呢? 本文我们会详细讨论MVC应用程序一个请求的 ...

  6. golang学习遭遇duang...duang...duang

    初学golang时,在windows上使用liteIDE进行,很多语法都能自己调整. 后来使用linux桌面,再次编写时,发现很多东西都忘掉了.这难道就是习惯gocode后的弊端吗?还是人到 前中年 ...

  7. linux 命令——文件管理 cat

    一.介绍 cat 是一个文本文件查看和连接工具.从第一个字节开始正向查看文件的内容. 主要有三大功能: 1.一次显示整个文件.$ cat   filename ~,y6;e2.从键盘创建一个文件.$ ...

  8. [转]解决crystal report水晶报表在浏览器提示bobj未定义的错误

    网上的中文文章(比如这篇文章)都是写的部署到服务器后出现的问题,同时也指出要把crystal report的aspnet_client文件夹拷贝到对应项目的根目录里,这样就可以正常显示了,但是具体到我 ...

  9. 微信web调试工具

    做微信公众号开发的时候,最头疼的一件事,莫过于bug调试了. 由于有些功能涉及到权限问题,必须在微信公众号内打开,所以对开发人员来说就是遇到了一场噩梦. 这里有两种方法: 1.工具:mac.使用微信m ...

  10. 关于如果修改 ie 浏览器 文本模式

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/html4/stric ...