因爲項目中須要使用到富文本顯示和編輯,這方面手機還真是不如前端,一查富文本編輯幾乎都是前端的,目前富文本顯示主要有3種方案,先簡單介紹下:html
tvAttachTask.text = Html.fromHtml("負責任務<font color=\"#479CD9\">${it[1]}</font>個,已完成<font color=\"#479CD9\">${it[0]}</font>個")
複製代碼
固然,開源大法好github上已經有人作了前端
這裏你們擇優選用吧,這裏介紹下第三種方案....java
###################我是漂亮的分割線###################git
//聽說這種方式有問題,待驗證
loadData(html, "text/html", "UTF-8")
//實際使用這種方式沒問題
loadDataWithBaseURL(null, html, "text/html", "UTF-8", null)
複製代碼
val html = """ <p style="text-align: center; "><span style="font-size: 18px; background-color: rgb(255, 255, 255); color: rgb(255, 0, 0); font-weight: bold; font-style: italic;">任務描述</span></p> <p style="text-align: left;"><span style="font-size: 18px; background-color: rgb(255, 255, 255); color: rgb(255, 0, 0); font-weight: bold; font-style: italic;">任務描述任務描述</span></p> <p style="text-align: right;"><span style="font-size: 18px; background-color: rgb(255, 255, 255); color: rgb(255, 0, 0); font-weight: bold; font-style: italic;">任務描述任務描述任務描述</span></p> <p style="text-align: center; "><img src="http://www.bjdalisi.com/uploads/flash/1804101056357681.jpg"></p> <p style="text-align: center; "><br></p> <p style="text-align: center; ">jjj</p> <p style="text-align: center; ">hjj</p> <p style="text-align: center; "><br></p> <p style="text-align: center; "><br></p> <p style="text-align: center; "><br></p> <p style="text-align: left;">bjju<i>hjjj</i> <embed src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4" /> <img src="http://www.bjdalisi.com/uploads/flash/1804101056357681.jpg"></p> """
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)
複製代碼
上面的html在Chrome上顯示,好像沒有什麼問題,可是在手機上顯示,竟然能夠左右滑動,這樣確定交不了差的。github
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")
}
複製代碼
通過前一個步驟的處理,富文本顯示是沒什麼問題了,至少我在使用上沒什麼問題了,可是點擊連接直接就跳轉到瀏覽器了,圖片點擊不能方法預覽呢?產品大大找麻煩怎麼辦?不作了仍是作不了?別急,so easy...web
上面咱們引入了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")
複製代碼
這裏僅用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....框架
附:dom
本文demo:github.com/joker-fu/Ri…
富文本編輯:github.com/joker-fu/Ri…