2011-02-17 11 views
14

Si empujo este código HTML en WebView:Android WebView manipulación incorrecta saltos de línea en el texto con formato previo

webView.loadData("<html><body><pre>line 1\nline 2</pre></body></html>", "text/html", "utf-8"); 

se renderiza como (en el emulador y también en el dispositivo)

line 1line 2 

en contraposición a

line 1 
line 2 

como era de esperar. Si guardo este código HTML en la tarjeta SD y abro el archivo en el navegador, se muestra bien. Supongo que estoy haciendo algo mal, o esto puede ser un error. En cualquier caso, quiero programar mediante programación HTML con líneas nuevas preformateadas en un WebView y renderizar las líneas nuevas.

Respuesta

19

La cadena que se pasa al loadData debe ser URI-escapada.

Puede utilizar URLEncoder.encode() de hacer eso, pero por alguna razón WebView no decodifica el '+' de nuevo a un ' '. Un trabajo alternativo es reemplazar todo el '+' con '%20' usted mismo.

Por ejemplo (y con la traducción '+'):

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); 
} 
+5

tha ¡nks! La próxima vez, voy a RTFM correctamente – Axarydax

+0

cuando estaba pasando datos html descargados del servidor, webview me mostró el mensaje "la página no está disponible". esta publicación también me ayudó a resolver mi problema – vokilam

+0

NewLines para "texto/normal": las páginas aún no funcionan, incluso si la cadena cargada está codificada en la URL. – Radon8472

9

Prueba esto:

webView.loadDataWithBaseURL(...) 

Más información here

+2

¡Simple y funcionando! Ejemplo de llamada: 'webView.loadDataWithBaseURL (null, html," text/html "," UTF-8 ", null);' –

2

También puede utilizar

chapterWebView.loadDataWithBaseURL("file:///android_asset/NTImages/", message.replaceAll("\\n", "<br/>") , "text/html", "utf-8", "utf-8"); 
Cuestiones relacionadas