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

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

《Android TextView显示HTML 图片居中且不缩放》 HTML文本

《Android TextView显示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);

五、项目结构

《Android TextView显示HTML 图片居中且不缩放》 项目结构.png

    原文作者:AdminFun
    原文地址: https://www.jianshu.com/p/8a1c7451507f
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞