【问题标题】:How to show html page first line in textview as preview in list (recycler view) android?如何在textview中显示html页面第一行作为列表(回收器视图)android中的预览?
【发布时间】:2018-07-19 16:33:05
【问题描述】:

我正在接收一组消息,每条消息都有各种属性,其中一个是内容属性,如下所示

"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n<meta http-equiv=\"Content-Style-Type\" content=\"text/css\">\n<title></title>\n<meta name=\"Generator\" content=\"Cocoa HTML Writer\">\n<style type=\"text/css\">\np.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px '.SF UI Text'}\nspan.s1 {font-family: '.SFUIText'; font-weight: normal; font-style: normal; font-size: 11.00pt}\n</style>\n</head>\n<body>\n<p class=\"p1\"><span class=\"s1\">Test Ab<br>\n---------------------<br>\n</span></p>\n<p class=\"p1\"><span class=\"s1\">Verify the field </span></p>\n</body>\n</html>\n"

有一个显示所有消息的列表视图和一个显示描述的详细视图,在详细视图中我已经实现了 web 视图来显示上面的内容,渲染得很好。在列表视图中,我需要将上述内容的唯一第一行显示为预览。

我认为对每个列表项使用 Web 视图是危险的,而且列表中还会显示除此之外的其他项目,问题是因为上面的内容是整个网页而不是简单的 HTML 标记(例如. 简单的段落附件标签可以正常工作)。

我也在 textview 上尝试了 HTMLTextview 库和 setText(Html.fromHtml()) 方法,但我得到了

   p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px '.SF UI Text'} 

目前作为第一行。

让我知道如何实现只显示第一行作为预览。

【问题讨论】:

  • 请检查我的回答如果它适合你然后让我知道如果它不那么让我为你修改。
  • 实际上,我们最终将服务器响应更改为没有页面和只有

    标记。

标签: android html textview


【解决方案1】:

如果你知道要预览的每一行的 html 标签或 id 或类,也许jsoup 可以帮助你做你想做的事。

第一个parse the html

String html = "<html><head><title>First parse</title></head>"
  + "<body><p>Parsed HTML into a doc.</p></body></html>";
Document doc = Jsoup.parse(html);

那么 Finding elements

getElementById(String id)
getElementsByTag(String tag)
getElementsByClass(String className)
getElementsByAttribute(String key) (and related methods)

喜欢

Element content = doc.getElementById("content");

最后content.text() 会给你你想要的。

【讨论】:

  • @Learner_Programmer 有帮助吗?
【解决方案2】:

如果您想要来自给定链接的内容,那么我已经编写了代码。这是一个临时解决方案,我的意思是我已经测试了给定的链接。注意它仅适用于从元标记获取内容。

在gradle中添加,依赖: implementation 'org.jsoup:jsoup:1.11.3'

String html = "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n<meta http-equiv=\"Content-Style-Type\" content=\"text/css\">\n<title></title>\n<meta name=\"Generator\" content=\"Cocoa HTML Writer\">\n<style type=\"text/css\">\np.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px '.SF UI Text'}\nspan.s1 {font-family: '.SFUIText'; font-weight: normal; font-style: normal; font-size: 11.00pt}\n</style>\n</head>\n<body>\n<p class=\"p1\"><span class=\"s1\">Test Ab<br>\n---------------------<br>\n</span></p>\n<p class=\"p1\"><span class=\"s1\">Verify the field </span></p>\n</body>\n</html>\n";

Document document = Jsoup.parse(html);
Elements e = document.select("meta");
for (int i = 0; i<e.size(); i++ ) {

    Log.e("element",e.get(i).toString());
    // E/element: <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    // E/element: <meta http-equiv="Content-Style-Type" content="text/css">
    // E/element: <meta name="Generator" content="Cocoa HTML Writer">

    if(e.get(i).attr("content").contains("text/")){

    }else {
        Log.e("content", e.get(i).attr("content"));
        //output: Cocoa HTML Writer
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多