android開發時,有時我們想靈活修改樣式靈活,所以想使用富文本顯示方式展示,一般我們有以下兩種方式:
1.使用TextView顯示,使用textView.setText(Html.from(html))顯示富文本內容
2.使用WebView加載,使用webView.loadData()或者webView.loadDataWithBaseURL()加載富文本內容
但是以上兩個方法都不夠完美,TextView顯示的富文本樣式支持非常有限;
WebView性能損耗比較大而且容易造成內容泄露,整個頁面單獨進程使用WebView還可以,頁面某部分特別是列表頁面嵌入WebView不太可能吧。
所以下面就介紹一個比較有名好用的開源框架Markwon,它的原理是解析對應標簽為Spanned,然后再顯示到TextView上面。好用性能又好,太牛逼了。
下面介紹基本使用:
框架地址:https://noties.io/Markwon/ 以及github:https://github.com/noties/Markwon
android項目里引入:
allprojects{repositories{maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }}}
api 'io.noties.markwon:core:4.3.1' //引入核心庫
api 'io.noties.markwon:image:4.3.1' //引入圖庫支持庫
api 'io.noties.markwon:image-glide:4.3.1' //引入使用Glide加載圖片的支持庫
更多具體庫,請查看:https://noties.io/Markwon/docs/v4/install.html 以及 https://search.maven.org/search?q=io.noties.markwon
android使用demo代碼kotlin寫法:
val content = "\n" +
"\n" +
"1. 第一項:\n" +
" - 第一項嵌套的第一個元素\n" +
" - 第一項嵌套的第二個元素\n" +
"\n" +
"這是一個鏈接 [菜鳥教程](https://www.runoob.com)\n"
val markwon = Markwon.builder(this)
.usePlugin(GlideImagesPlugin.create(this))
.usePlugin(GlideImagesPlugin.create(Glide.with(this)))
.usePlugin(GlideImagesPlugin.create(object : GlideImagesPlugin.GlideStore {
override fun cancel(target: Target<*>) {
Glide.with(this@TestActivity).clear(target);
}
override fun load(drawable: AsyncDrawable): RequestBuilder<Drawable> {
return Glide.with(this@TestActivity).load(drawable.destination);
}
}))
.build()
markwon.setMarkdown(textView, content)
上面是顯示markdown富文本demo,如果想要顯示html也是可以的,不過要添加對應的html依賴庫。