Android TextView显示html

在工作中用到了复杂的图文混排,为了降低开发的难度增加扩展性,想到了使用TextView解析html。TextView解析展示html的原理后面文章进行介绍。本文采用html-textview开源项目。但是html-textview在使用过程中存在以下几个问题:

1、html-textview中,如果图片宽度设置为match_parent,TextView在计算图片的宽度是没有计算TextView的padding,所以如果TextView设置了LeftPadding或者RightPadding,图片在展示的时候会出现问题。

改进方法:

HtmlHttpImageGetter类getScale中计算图片缩放时减掉左右内边矩

计算宽度时减去内边距

2、如果有类似如下html:,图片会被解析为ClickableSpan,点击 ClickableSpan 会出现滚动现象

改进方法:LocalLinkMovementMethod实现View.OnTouchListener并重写public boolean onTouch(View view, MotionEvent event)方法

重写onTouch解决点击滚动问题

3、如果把html-textview应用于list的item中,由于图片的加载没有做本地缓存,完全来源于网络。导致网络流量消耗巨大。

改进方法:在HtmlHttpImageGetter的getDrawable中增加本地缓存,首先从缓存获取,获取失败再从网络获取

4、如果把html-textview应用于list的item中,由于在TextView中没有给图片预留位置,导致异步加载图片结束后,item大小会发生变化,产生闪动的现象。所以首先应该加载本地的占位图,异步加载网络图片结束后替换占位图。

改进方法:在HtmlHttpImageGetter的getDrawable中增加增加占位图

增加占位图

网络图请求成功后再替换占位图:

更新占位图

5、目前TextView中支持的html标签数量有限,例如不同行的行间距不能设置,而且TextView中所有元素的对齐方式由TextView的gravity属性设置,不能对不同的对象设置不同的对齐方式,比如说文字左对齐、图片居中对齐是不好实现的。

总结:以上是我在做调研的时候遇到的几个问题,其中问题2的解决方案参考了安卓 TextView 七宗罪,干货好文,有需要的可以看下。

你可能感兴趣的:(Android TextView显示html)