在android上加载HTML内容列表的最佳方式是什么?



我正在尝试使用recyclerView在我的应用程序上加载带有html标签(html内容)的字符串列表。到目前为止,我已经尝试使用Html.fromHtml()方法,但没有找到任何运气,因为它只支持有限的HTML标签。

Html.fromHtml支持:

  • p
  • ul
  • div
  • 跨度
  • b
  • em
  • 引用
  • dfn
  • 小<
  • 字体/gh>
  • 引用
  • tt
  • u
  • s
  • 罢工
  • h1h2
  • h3
  • h4
  • h5
  • 编辑
  • img
  • br

我需要解析的是html。fromhtml不支持的标签比如项目符号,内联CSS

所以我决定加载内容在WebView。我知道实现WebView作为recyclerView项目不是一个好的做法,但我找不到任何替代解决方案。

有什么机制可以让我得到可靠的解决方案吗?作为webview内部的recyclerview有很多问题,如滚动问题,异步内容加载等。请帮助我如何才能顺利滚动这件事。

到目前为止我已经做了

class MessageViewHolder internal constructor(itemView: View) :  RecyclerView.ViewHolder(itemView) ,ViewHolderBinder{
private var webView: WebView? = itemView.findViewById(R.id.ac_web_view)
override fun bind(position: Int) {
super.bind(position)
loadContentOnWebView(message) // html content
}
private fun loadContentOnWebView( message: String) {
webView?.apply { 
isVerticalScrollBarEnabled = false
settings.javaScriptEnabled = true
setLayerType(View.LAYER_TYPE_HARDWARE, null)
webViewClient = object : WebViewClient() {
override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
view.context.startActivity(
Intent(Intent.ACTION_VIEW, Uri.parse(url))
)
return true
}
}
loadDataWithBaseURL(null, message.changeHtmlLinkColor(), "text/html", "UTF-8", null)
}
}

}

如果你只需要设置字符串,你只需要在ViewHolder类中使用Html.fromHtml()(不需要为文本添加webview),在ViewHolder类中添加这段代码,也许它会起作用!

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
view.text = Html.fromHtml("your HTML String", Html.FROM_HTML_MODE_COMPACT)
} else {
view.text = Html.fromHtml("your HTML String")
}