android富文本显示方案格式,Android 一种简单的富文本显示方案(附富文本编辑方案)...

由于项目中需要使用到富文本显示和编辑,这方面手机还真是不如前端,一查富文本编辑几乎都是前端的,目前富文本显示主要有3种方案,先简单介绍下:

1. 使用Html.fromHtml

Html.fromHtml解析

TextView显示解析结果

标签及样式支持较少,图片显示得单独处理(前端富文本框架创建的内容,这种方式就不是很适用了,标签样式太多)

tvAttachTask.text = Html.fromHtml("负责任务${it[1]}个,已完成${it[0]}个")

复制代码

2. 自行解析html标签

针对具体的标签样式进行解析

用Span或者原生控件组合显示

需要自己做解析处理,没解析到的就显示不了

当然,开源大法好github上已经有人做了

3. WebView加载

简单快捷

标签基本都支持

需要做一些处理 感觉性能开销大(特别是像我们项目中连评论回复都是富文本)

这里大家择优选用吧,这里介绍下第三种方案....

###################我是漂亮的分割线###################

具体实现

1 核心方法

//据说这种方式有问题,待验证

loadData(html, "text/html", "UTF-8")

//实际使用这种方式没问题

loadDataWithBaseURL(null, html, "text/html", "UTF-8", null)

复制代码

2 基本使用

val html = """

任务描述

任务描述任务描述

任务描述任务描述任务描述

0ec885facd3876c5bede93279fb76dae.png

jjj

hjj

bjjuhjjj

0ec885facd3876c5bede93279fb76dae.png

"""

val webView = findViewById(R.id.webView)

//取消滚动条

webView.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY)

//不支持缩放功能

webView.getSettings().setSupportZoom(false)

webView.loadDataWithBaseURL(null, html, "text/html", "UTF-8", null)

复制代码

3 显示问题处理

上面的html在Chrome上显示,好像没有什么问题,但是在手机上显示,居然可以左右滑动,这样肯定交不了差的。

implementation 'org.jsoup:jsoup:1.11.3'

复制代码

处理链接不能换行问题

/** 修复 a 标签 **/

private fun fixA(doc: Document) {

//这里我们使用 jsoup 修改 a 的属性:

val `as` = doc.getElementsByTag("a")

for (i in 0 until `as`.size) {

val tempA = `as`[i]

tempA.attr("style", "word-break: break-word")

}

}

复制代码

处理图片过大拖动问题

/** 修复 img 标签 **/

private fun fixImg(doc: Document) {

//使用 jsoup 修改 img 的属性:

val images = doc.getElementsByTag("img")

for (i in 0 until images.size) {

//宽度最大100%,高度自适应

images[i].attr("style", "max-width: 100%; height: auto;")

}

}

复制代码

处理视频问题

/** 修复 embed 标签 **/

private fun fixEmbed(doc: Document) {

//使用 jsoup 修改 embed 的属性:

val embeds = doc.getElementsByTag("embed")

for (element in embeds) {

//宽度最大100%,高度自适应

element.attr("style", "max-width: 100%; height: auto;")

.attr("controls", "controls")

}

//webview 无法正确识别 embed 为视频时,需要这个标签改成 video 手机就可以识别了

doc.select("embed").tagName("video")

}

复制代码

4 点击问题

经过前一个步骤的处理,富文本显示是没什么问题了,至少我在使用上没什么问题了,但是点击链接直接就跳转到浏览器了,图片点击不能方法预览呢?产品大大找麻烦怎么办?不做了还是做不了?别急,so easy...

上面我们引入了jsoup,再配合我们原生交互起来就O啦!具体操作如下:

注入方法

private inner class PreViewJs{

//@JavascriptInterface注解方法,js端调用,4.2以后安全

@JavascriptInterface

fun onTagClick(url: String, info: String) {

}

}

...

webView.settings.javaScriptEnabled = true

webView.settings.domStorageEnabled = true

...

addJavascriptInterface(PreViewJs(), "PreViewJs")

复制代码

jsoup修改html

这里仅用img标签处理做示范:

/** 修复 img 标签 **/

private fun fixImg(doc: Document) {

//使用 jsoup 修改 img 的属性:

val images = doc.getElementsByTag("img")

for (i in 0 until images.size) {

//宽度最大100%,高度自适应

images[i].attr("style", "max-width: 100%; height: auto;")

//点击调用原生传参

.attr("onclick", """PreViewJs.onTagClick(this.src,'富文本图片.jpg')""")

}

}

复制代码

详见demo....

附:

本文demo:github.com/joker-fu/Ri…

富文本编辑:github.com/joker-fu/Ri…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值