概述
详情内容主要是图文和链接形式,推送给客户端后需要在APP内进行展示,移动端富文本的实现技术后大致分为原生实现和webview实现两种,下面分别对两种技术各自的特点和实现进行简要介绍。
原生实现-动态生成TextView和ImageView
获取到详情数据后根据文字和图片的具体数量和相对位置动态生成textview和imageview展示这些内容。缺点是需要在内容解析上花费大量精力,可支持的内容形式也比较有限。除非是非常简单的场景,这种方式一般不会采用。
原生实现-SpannableString
利用TextView对SpannableString的支持,将HTML文本解析,转化为SpannableString后进行展示,优点是安卓SDK中已经提供了相关的工具,即Html
类,免去了手动解析的工作,并且具有原生性能,缺点是支持的内容形式比较优先,而且如果内容较多,Html.fromhtml()
也相应会比较耗时。
支持的内容标签:
- 字体:
<font>
,颜色(color)、字体(face)、字体样式:粗体、斜体、下划线,但不支持大小(size),但可以自定义Html.TagHandler
以实现对文字大小的支持; - 列表:
<ul>
和<li>
; - 图片:
<img>
; - 其他:
<div>
,<span>
,<strong>
,<b>
,<em>
,<cite>
,<dfn>
,<i>
,<big>
,<small>
,<blockquote>
,<tt>
,<p>
,<a>
,<u>
,<del>
,<s>
,<strike>
,<sup>
,<sub>
,<h>
,<br>
;
为了方便使用者拓展,提供了Html.TagHandler
接口,由用户自己解析处理HTML标签。上述标签已经涵盖了多数简单的需求场景,如果有能力通过Html.TagHandler
几乎可以实现任何SpannableString的能力。如果不想自行定义标签解析器,也有一些第三方的库可以提供支持。
第三方库:
- HtmlSpanner:增加了更多标签的支持,免去自定义tag解析器的麻烦。
采用原生的方式,归根结底取决于SpannableString的能力,SpannableString无法实现的需求这条技术方案就只能被迫放弃。
WebView实现
采用WebView实现富文本展示可以说是能力支持最全的了,其充分利用了移动web端已有的能力,只需简单处理甚至不用额外处理就可以实现对富文本的支持。
支持的内容标签:
- 几乎所有的html标签,包括视频、图片、表格等
核心方法:
// 加载富文本内容
webView.loadData(htmlStr, "text/html", "UTF-8");//中文可能乱码
webView.loadDataWithBaseURL(null, htmlStr, "text/html", "UTF-8", null);//推荐
其他常见配置:
webView.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);//取消滚动条
webView.getSettings().setSupportZoom(false);//不支持缩放功能
图片宽度适应屏幕:
// jsoup 修改 img 的属性:
final Document doc = Jsoup.parse(htmltext);
final Elements imgs = doc.getElementsByTag("img");
for (int i = 0; i < imgs.size(); i++) {
//宽度填充手机,高度自适应
//这里优化的方向为先判断图片原本的大小,达到阈值才进行图片大小适配
imgs.get(finalI).attr("style", "width: 100%; height: auto;");
}
视频宽度适应屏幕:
// jsoup 修改 embed 的属性:
Elements embeds = doc.getElementsByTag("embed");
for (Element element : embeds) {
//宽度填充手机,高度自适应
element.attr("width", "100%").attr("height", "auto");
}
//webview 无法正确识别 embed 为视频,把这个标签改成 video
doc.select("embed").tagName("video");
最后
以上就是阳光唇膏为你收集整理的Android富文本展示的全部内容,希望文章能够帮你解决Android富文本展示所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复