在 android 上加载 HTML 内容列表的最佳方式可能是啥?
Posted
技术标签:
【中文标题】在 android 上加载 HTML 内容列表的最佳方式可能是啥?【英文标题】:What might be the best way to load list of HTML content on android?在 android 上加载 HTML 内容列表的最佳方式可能是什么? 【发布时间】: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 加载内容 【参考方案1】:如果你只需要设置字符串,你只需要在你的 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")
【讨论】:
他在代码中已经提到有些标签不支持这种方式 他还需要在代码中提到那个标签,还要检查他使用Html.toHtml()而不是Html.fromHtml(),也许你必须非常仔细地阅读代码! @gtxtreme以上是关于在 android 上加载 HTML 内容列表的最佳方式可能是啥?的主要内容,如果未能解决你的问题,请参考以下文章