美文网首页程序员AndroidAndroid收藏集
Android TextView显示HTML 图片居中且不缩放

Android TextView显示HTML 图片居中且不缩放

作者: AdminFun | 来源:发表于2018-12-26 10:44 被阅读12次

    开门见山,先看效果图,如果是你想要的效果,请再往下读。


    HTML文本
    TextView展示效果

    一、问题

    Android TextView可以支持简单的Html标签,但大部分Html标签是不支持的或者处理得不太好的,其中Img标签就是如此。如果在html中使用img标签的话就会遇到以下问题:
    1、图片不能居中显示
    2、图片的大小被缩小
    3、图片是在ImageGetter中获取,ImageGetter不能和ImageSpan同时使用
    笔者通过参考大量资料和源码,解决了上述3个问题。

    本章不做过多的原理讲解,毕竟能抓耗子就是好猫,需要详细了解原理的可以下载源码慢慢品味,望大神指导!

    二、源码

    点击查看源码:项目可直接运行

    三、思路

    1、图片不能居中显示

    android.text.Html 源码对图片的处理使用了ImageSpan,而ImageSpan的对齐方式只有BottomLine和BaseLine两种,没有居中对齐的方式。所以需要自定义ImageSpan,重写draw()方法,在draw方法中位移Y轴偏移量,X轴不变,使图片达到上下居中效果。

    2、图片尺寸被缩小

    Drawable.setBounds()时,输入Bitmap的真实宽高即可防止图片被缩放。

    3、ImageGetter和ImageSpan的冲突

    上面说到android.text.Html源码中通过 ImageGetter 获取到Drawable后,使用了ImageSpan 将 Drawable 绘制到文本上,想要自定义ImageSpan,遂强行重写Html类,并将自定义 ImageSpan 强行注入到自定义Html类中,促成一段姻缘。。。

    四、使用

    导入依赖
    导入项目前需要先导入一个依赖,此依赖并非是组件的地址!!!

    implementation 'org.ccil.cowan.tagsoup:tagsoup:1.2.1'
    

    组件使用

    1、this.htmlTextView = this.findViewById(R.id.activity3_text1);
    2、this.htmlTextView.setHtmlInterface(this) // 设置下载回调
    3、    .setDefaultDrawable(R.drawable.mine_order_s1) // 设置默认图
    4、    .setHtml(str); // 设置要展示的HTML字符串
    

    下载回调

    htmlTextView.invalidate(file);
    

    五、项目结构

    项目结构.png

    相关文章

      网友评论

        本文标题:Android TextView显示HTML 图片居中且不缩放

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