【发布时间】:2021-10-31 14:04:22
【问题描述】:
我正在尝试使用 recyclerView 在我的应用程序上加载带有 html 标记(HTML 内容)的字符串列表。到目前为止,我已经尝试在 recyclerView 视图上使用 Html.fromHtml() 方法,但找不到任何运气,因为它只支持有限的 HTML 标签。
Html.fromHtml 支持:
- p
- ul
- 李
- div
- 跨度
- 强
- b
- em
- 引用
- dfn
- 我
- 大
- 小
- 字体
- 块引用
- tt
- 一个
- 你
- 德尔
- s
- 罢工
- 支持
- 分
- h1
- h2
- h3
- h4
- h5
- h6
- img
- br
我需要解析的是那些 Html.fromHtml 不支持的标签,例如项目符号、内联 CSS
所以我决定在 WebView 上加载内容。我知道将 WebView 实现为 recyclerView 项不是一个好习惯,但我找不到任何替代解决方案。
是否有任何机制可以让我获得可靠的解决方案。由于 recyclerview 中的 webview 存在许多问题,例如滚动问题、异步内容加载等。 请帮助我如何才能在这件事上顺利滚动。
到目前为止,我已经这样做了
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)
}
}
}
【问题讨论】:
-
为什么不用JSoup HTML解析器来获取带有目标url的html标签?
-
汤?或者,如果您需要,请尝试某种形式的抓取或公开 API 以从您的网站获取数据
-
我没有通过 URL 加载内容
标签: android android-recyclerview webview android-webview