在 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 内容列表的最佳方式可能是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Android开发之头部悬浮的上拉加载,下拉刷新的列表

Android 开发 上拉加载更多功能实现

Android:从某个点开始在列表视图上加载项目

将数据从互联网加载到列表视图的最合适方法

无法使用 LibVLC 在 android 应用上加载 m3u 播放列表

在 Android 中保存 ArrayList 的最简单方法是啥?