Подтвердить что ты не робот

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 и отобразить новые строки.

4b9b3361

Ответ 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");