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

开门见山,先看效果图,如果是你想要的效果,请再往下读。
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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值