textView加载带图片的html

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

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

只需要提供html即可,但是如果html中有pic时候 则会出现以下的情况;

可以看到本该出现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:scaleType详解
  3. TextView 属性
  4. andriod EditText的属性[转]
  5. TextView属性详解
  6. Android开发笔记——以Volley图片加载、缓存、请求及展示为例理
  7. EditText的inputType属性详解,让指定的EditText获取焦点并弹出软
  8. Android使用BitmapRegionDecoder获取指定区域的图片
  9. React Native基础之Image

随机推荐

  1. android 不使用布局文件,完全由代码控制布
  2. Android 分享微信小程序
  3. Android:Timer定时器
  4. Android ExpandableListView 带有Checkbo
  5. Android应用程序启动过程源代码分析(2)
  6. 节操视频播放器
  7. Android中如何自定义view
  8. android 倒计时
  9. Android(安卓)EditText样式
  10. Android CheckBox控件使用OnClickListene