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

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


Android TextView显示HTML 图片居中且不缩放_第1张图片
HTML文本

Android TextView显示HTML 图片居中且不缩放_第2张图片
TextView展示效果

一、问题

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

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

二、源码(最近一次更新2019/10/12)

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

三、思路

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.setHtml(str); 

你可能感兴趣的:(Android TextView显示HTML 图片居中且不缩放)