美文网首页
android textview 加载html 显示图片

android textview 加载html 显示图片

作者: S晔枫 | 来源:发表于2017-12-11 20:40 被阅读24次

    需求: TextView中显示html 还要展示上面的图片, 文字还好解决 直接调用

    // html要显示的文字
    textView.setText(Html.fromHtml(html));
    

    坑的是里面还要显示图片, 而且还不确定图片的位置, 折腾了大半天, 在网上找到一个比较比较靠谱的方法, 特此记录 :

        @Deprecated
          // 用到的方法   从提供的HTML字符串中返回可显示样式的文本,并使用遗留标记
          public static Spanned fromHtml(String source, ImageGetter imageGetter,TagHandler tagHandler) {
            return fromHtml(source, FROM_HTML_MODE_LEGACY, imageGetter, tagHandler);
    }
    

    好了 直接上代码 (ps: 可拿去直接用)
    自定义ImageGetter类

    public class MyImageGetter implements Html.ImageGetter {
    private Context context;
    String data;// 要加载的html内容 
    TextView tv;// 加载html内容的TextView控件
    public MyImageGetter (Context context, TextView tv,
                              String data) {
        this.context = context;
        this.tv = tv;
        this.data = data;
    }
    
    @Override
    // 主要是重写此方法
    public Drawable getDrawable(String source) {
        Drawable drawable = null;
        if (source != null && source.length() > 0) {
            // 截取图片名称   可根据自己的实际情况选择
            String imgName = source.substring(33, source.length());
            // 图片地址  我这因为后台返回的是相对地址 需要我自己拼接
            final String imgUrl= NetWork.BASE_URL + source.substring(2, source.length());
            File file = new File(Environment.getExternalStorageDirectory(), imgName);
            if (file.exists()) {
                drawable = Drawable.createFromPath(file.getAbsolutePath());
                if (drawable != null) {
                    drawable.setBounds(0, 0, drawable.getIntrinsicWidth() * 2, drawable.getIntrinsicHeight() * 2);
                }
            } else {
                VolleyUtils.getNetworkImg(context, imgUrl, imgName, tv, data, this);
            }
        }
        return drawable;
    }
    }
    

    下载图片 VolleyUtils 类

    public class VolleyUtils {
    /**
     * 通过volley请求网络图片
     * @param url
     */
    public static void getNetworkImg(Context context, String url, final String name, final TextView tv,
                               final String data, final NetWorkImageGetter mNetWorkImageGetter) {
        RequestQueue queue = Volley.newRequestQueue(context);
        ImageRequest request = new ImageRequest(url, new Response.Listener<Bitmap>() {
            @Override
            public void onResponse(Bitmap bitmap) {
                saveMyBitmap(name, bitmap);
                tv.setText(Html.fromHtml(data, mNetWorkImageGetter, null));
            }
        }, 0, 0, ImageView.ScaleType.CENTER, Bitmap.Config.RGB_565, new Response.ErrorListener() {
    
            @Override
            public void onErrorResponse(VolleyError error) {
            }
        });
        queue.add(request);
    }
    
    /**
     * 保存获取到的网络图片到sdcard
     * @param bitName
     * @param mBitmap
     */
    public static void saveMyBitmap(String bitName, Bitmap mBitmap) {
        File f = new File("/sdcard/" + bitName);
        try {
            f.createNewFile();
        } catch (IOException e) {
        }
        FileOutputStream fOut = null;
        try {
            fOut = new FileOutputStream(f);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        mBitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);
        try {
            fOut.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            fOut.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    }
    

    使用 实例:

            MyImageGetter imageGetter = new MyImageGetter (this,
                    textView, html);
            textView.setText(Html.fromHtml(html, imageGetter, null));
    

    整个逻辑 : 先判断本地是否存在对应的图片-->有 直接显示 -->没有从网上下载并保存到本地 .

    相关文章

      网友评论

          本文标题:android textview 加载html 显示图片

          本文链接:https://www.haomeiwen.com/subject/psswixtx.html