Android WebView неправильно обрабатывает символы новой строки в предварительно отформатированном тексте
Если я нажму этот HTML в WebView
:
webView.loadData("<html><body><pre>line 1\nline 2</pre></body></html>", "text/html", "utf-8");
он отображается как (в эмуляторе, а также на устройстве)
line 1line 2
в отличие от
line 1
line 2
как я ожидал. Если я сохраню этот HTML-код на SD-карте и открою файл в браузере, он будет отлично. Я полагаю, что я делаю что-то неправильно, или это может быть ошибкой. В любом случае, я хочу программным образом перетащить HTML с предварительно отформатированными символами новой строки в WebView
и отобразить новые строки.
Ответы
Ответ 1
Строка, переданная в loadData
, должна быть экранирована с помощью URI.
Вы можете использовать URLEncoder.encode()
для этого, но по какой-то причине WebView
не декодирует '+'
обратно на ' '
. Одна работа заключается в том, чтобы заменить все '+'
на '%20'
самостоятельно.
Например (и с переводом '+'
):
try {
webview.loadData(URLEncoder.encode("<html><body><pre>line 1\nline 2</pre></body></html>", "utf-8").replaceAll("\\+", "%20"), "text/html", "utf-8");
} catch (UnsupportedEncodingException uee) {
Log.e("webview", "", uee);
}
Ответ 2
Попробуйте следующее:
webView.loadDataWithBaseURL(...)
Подробнее здесь
Ответ 3
Также вы можете использовать
chapterWebView.loadDataWithBaseURL("file:///android_asset/NTImages/", message.replaceAll("\\n", "<br/>") , "text/html", "utf-8", "utf-8");