Ice Cream Sandwich无法识别HTML中的换行符

时间:2012-02-07 10:44:17

标签: java android html android-4.0-ice-cream-sandwich line-breaks

这与之前提出的问题相关here.致电replaceAll("\n", "<br />")然后Html.fromHtml()将正确格式化冰淇淋三明治前的文字;但是,正如您在photo中看到的那样,它在ICS中不起作用。我已经尝试了至少三十种不同的方法来捕捉和替换文本中的换行符,但我空手而归。有什么东西特别需要在ICS中调用,这是一个bug,还有其他人遇到过这个问题吗?任何人都可以想到一个解决方案,因为必须有一个。此外,任何人都可以提供一些有关为什么会发生这种情况的见解?这非常奇特。

要明确:我已在Froyo and Gingerbread上对此进行了测试,并且文本格式正确。在冰淇淋三明治中,它没有。

以下是Last.fm返回的文本示例。滚动到底部,它从“内容”开始。 Bon Iver URL

如果您有兴趣亲自测试它,这是一个演示应用程序。 http://dl.dropbox.com/u/2301775/lastfm-api-test.zip

以下两个屏幕截图说明了我的意思。他们来自测试应用程序。第一个运行姜饼和第二个运行冰淇淋三明治。

Gingerbread screenshot

Ice Cream Sandwich screenshot

1 个答案:

答案 0 :(得分:2)

(删除了旧条目......测试了测试项目)

有一个非常有趣的“问题”,但我不确定由谁负责。

我测试了你的应用并让它运行起来。 我正在寻找一个2.2设备,其中第一个\n出现在字符串中(索引413),而不是我在ICS版本看了这个索引。在那里,我只能找到\r

你也可以看到LogCat的不同之处。在ICS上你看到没有意义的乱序文本但在ICS下面你可以毫无问题地阅读完整的文本。

因此,您应该替换\n,而不是将<br/>替换为\r。我只是为了确保按此顺序替换:

  1. \n\r
  2. \n
  3. \r
  4. 第1步非常重要,如果某人使用\n\r,则可以“加倍”休息......

    使用过的工作代码:

    String artistText = artistInfo.getWikiText();
    Log.i("Log", artistText);
    artistText = artistText.replaceAll("\n\r", "<br />");
    artistText = artistText.replaceAll("\n", "<br />");
    artistText = artistText.replaceAll("\r", "<br />");
    System.out.println(artistText);
    txtWiki.setText(Html.fromHtml(artistText));