效果图如下:
首先,Android中显示Html内容,有3中方式:(目前我用到的有这3种)
1、可以利用Android原生的Html.fromHtml(str, imageGetter, tagHandler)来进行显示。(不过,我这边用了,即使加了页面加载动画,还是觉得非常慢,有大量图片,会导致OOM;如果图片不多的话,可以考虑)
2、利用第三方插件HtmlTextView。
GitHub地址:https://github.com/PrivacyApps/html-textview
图片加载很顺畅,使用方法也非常简单,不过,有两个注意事项:
(1)其中,HtmlHttpImageGetter有3个构造函数,可以根据自己的情况选择。
(2)加载大量图片的时候,会导致OOM内存溢出。针对于这个情况,HtmlHttpImageGetter有一个压缩图片的方法可以调用,可以进去查看它的公共方法。(不过,我这边显示的图片过大,每张1M左右,并且一下子有几十张,即使设置了压缩图片,还是会导致OOM问题,目前还没解决,有大神知道咋弄的,拜托指点一下,非常感谢!)
对了,这个第三方插件的基本用法,点击上面的连接,进去一看就知道了,很简单。
3、第三种,是我没办法的情况下想的:把html标签里的内容利用正则表达式拿出来,其中,文本内容用一个TextView代替,<img>标签图片用一个ImageView代替,其他相关的标签自行选择替换。说白了,就是创建一个个的TextView以及ImageView填充到布局里(LinearLayout之类的)。要说明的是:其中图片显示用Glide来实现。目前我这边测试的情况还是可以的,加载的速度非常快,也没因内存问题导致APP崩溃。
/** * 格式化html标签 * @param content * @return */ public static String addSpecialCharToString(String content) { content = content.replace("<", "##<"); content = content.replace(">", ">##"); content = content.replace("####", "##"); return content; } /** * 正则获取img标签中的图片的URL * @param imgHtml * @return */ public static String regGetImageUrl(String imgHtml) { Pattern pat = Pattern.compile("(.src=)(.+?)(style=.)"); Matcher m = pat.matcher(imgHtml); if(m.find()){ return m.group(2); } return null; }
目前,我用到的是以上3种,大家根据自己的情况选择。另外,第二种那个,有哪个大神知道咋弄的,拜托帮忙指点一下,再次感谢!