Ice Cream Sandwich не распознает разрывы строк в HTML - PullRequest
3 голосов
/ 07 февраля 2012

Это связано с предыдущим вопросом, который я задал здесь . Если вы наберете replaceAll("\n", "<br />"), а затем Html.fromHtml() правильно отформатирует текст в сэндвиче перед мороженым; однако, как вы можете видеть из фотографии , она не работает в ICS. Я пробовал, по крайней мере, тридцать различных способов зафиксировать и заменить разрывы строк в тексте, но я пришел с пустыми руками. Есть ли что-то конкретное, что мне нужно позвонить в ICS, это ошибка, кто-нибудь еще испытывал эту проблему? Может ли кто-нибудь придумать обходной путь, потому что он должен быть. Кроме того, кто-нибудь может предложить некоторое понимание того, почему это может происходить? Это очень своеобразно.

Для ясности: я проверил это на Froyo и Gingerbread , и текст отформатирован правильно. В Ice Cream Sandwich это не так.

Вот пример текста, возвращаемого с Last.fm. Прокрутите вниз, он начинается с «контента». Bon Iver URL

Вот демонстрационное приложение, если вы хотите проверить его из первых рук. http://dl.dropbox.com/u/2301775/lastfm-api-test.zip

Вот два скриншота, иллюстрирующих, что я имею в виду. Они из тестового приложения. Первый пряник и второй сэндвич с мороженым.

Скриншот пряника

Скриншот сэндвича с мороженым

1 Ответ

2 голосов
/ 07 февраля 2012

(удалена старая запись ... протестирован тестовый проект)

Возникла чрезвычайно интересная "проблема", но я не уверен, кто за нее отвечает.

Я протестировал ваше приложениеи получил это работает.Я искал устройство 2.2, где в строке появляется первый \n (индекс 413), а затем я посмотрел на этот индекс в версии ICS.Там я смог найти только \r.

Вы также можете увидеть разницу в LogCat.В ICS вы видите зашифрованный текст без смысла, но ниже ICS вы можете прочитать весь текст без проблем.

Так что вместо замены \n на <br/> вы должны также заменить \r.Я хотел бы, просто чтобы убедиться, заменить в этом порядке:

  1. \n\r
  2. \n
  3. \r

Шаг 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));
...