textView加载带图片的html

在android中textView中setText中加入富文本以及webView嵌入url是android交互html最简单的两种方式;
最近在项目中涉及到富文本;
当不考虑html中图片加载时候比较简单:

Spanned spanned =  = Html.fromHtml(html);tvContent.setText(spanned );

只需要提供html即可,但是如果html中有pic时候 则会出现以下的情况;
android富文本 加载带图片的html_第1张图片

可以看到本该出现pic的地方出现了空格;所以在填充富文本时候需要对图片处理一下,在Html中有两个方法:

 public static Spanned fromHtml(String source) {    }    public static Spanned fromHtml(String source, Html.ImageGetter imageGetter, Html.TagHandler tagHandler) {    }

其中三参的方法gormHtml可以处理图片的问题,需要匿名内部类实现 ImageGetter,第三个参数置为null:

ImageGetter imgGetter = new Html.ImageGetter() {          public Drawable getDrawable(String source) {              Drawable drawable = null;              URL url;              try {                  url = new URL(source);                  Drawable.createFromStream(url.openStream(), "");               } catch (Exception e) {                  e.printStackTrace();                  return null;              }              drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),                      drawable.getIntrinsicHeight());              return drawable;          }      };      CharSequence charSequence = Html.fromHtml(html, imageGetter, null);    tvContent.setText(charSequence );

这样就很明了了,imageGetter就是根据url来获取网络图片填充富文本的,很明显是一个好事操作,所以需要开子线程,而text的setText又是跟新UI的操作;这一点必须注意,不然你的drawable会为空,text无法填充富文本;
但是在填充过程中当html中pic比较多的时候回有部分获取不到;接下来就需要你在handler中控制一下就ok~ 下面来看最终代码:

    /**     *     * @param imageUrl     * @return     */   public Drawable getImageFromNetwork(String imageUrl) {        URL myFileUrl = null;        Drawable drawable = null;        try {            myFileUrl = new URL(imageUrl);            HttpURLConnection conn = (HttpURLConnection) myFileUrl                    .openConnection();            conn.setDoInput(true);            conn.connect();            InputStream is = conn.getInputStream();            drawable = Drawable.createFromStream(is, null);            is.close();        } catch (Exception e) {            e.printStackTrace();            return null;        }        return drawable;    }    Handler mHandler = new Handler(new Handler.Callback() {        @Override        public boolean handleMessage(Message msg) {            if (msg.what == 0x101) {                //tvContent.setText((CharSequence) msg.obj);                if (drawable == null){                    bindData();                    return false;                }                if (ncontent != null){                    tvContent.setText((CharSequence) msg.obj);                    tvContent.setClickable(true);                    tvContent.setMovementMethod(LinkMovementMethod.getInstance());                }            }            return false;        }    });    private void bindData() {        tvTitle.setText(mInfo.getNtitle());        ncontent = mInfo.getNcontent();        new Thread(new Runnable() {            Message msg = Message.obtain();            @Override            public void run() {                Html.ImageGetter imageGetter=new Html.ImageGetter() {                    @Override                    public Drawable getDrawable(String source) {                        //String source1 = source;                        ///Content/                        if (source.substring(0,8).equals("/Content")){                            source = Constant.BASE_URL + source;                        }                        drawable = getImageFromNetwork(source);                        if (drawable != null){                            drawable.setBounds(0,0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());                        }else if (drawable == null){                            //bindData();                            return null;                        }                        return drawable;                    }                };               //Spanned spanned = Html.fromHtml(ncontent, imageGetter, null);                CharSequence charSequence = Html.fromHtml(ncontent, imageGetter, null);                msg.what = 0x101;                msg.obj = charSequence;                if (mHandler!= null){                    mHandler.sendMessage(msg);                }            }        }).start();        toolbarTitle.setText(mInfo.getNtitle());        String nsubtitle = mInfo.getNtitle();        if (nsubtitle.length() > 10){            String nsubtitle_new = nsubtitle.substring(0, 10);            toolbarTitle.setText(nsubtitle_new + "...");        }else{            toolbarTitle.setText(nsubtitle);        }        tvTime.setText(mInfo.getNsendtime());    }

这样图片就显示了;希望大家在阅读之后多提建议,期待成长;

更多相关文章

  1. Android 上传图片到后台的一直方式Base64的String形式
  2. Android开发笔记——以Volley图片加载、缓存、请求及展示为例理
  3. Android使用BitmapRegionDecoder获取指定区域的图片
  4. Android UI开发第二十二篇——android 瀑布流图片实现
  5. Android富文本编辑器
  6. Android - TextView限制文本长度,英文占1位,中文占2位
  7. Android中给Button加上selector——点击按钮后变成不一样的图片
  8. Android图片异步加载的实现
  9. 【Android】 保存图片到系统图库, 并立即显示在图库中

随机推荐

  1. Android网易有道词典案例源码分享
  2. Android --- MediaPlayer的使用详解
  3. android的自动更新
  4. Android中的SQLiteOpenHelper类
  5. android按钮事件触发拨号器
  6. Android(安卓)ARouter路由中传对象遇到的
  7. Android退出时关闭所有Activity的方法
  8. Android中文API(96)——SoundEffectConstan
  9. Android Virtual Device仿真界面对应快捷
  10. Android动态改变工程依赖