我正在尝试使用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")
}