studio programacion móviles libro desarrollo curso aplicaciones android image webview android-webview

móviles - manual de programacion android pdf



Android: imagen local en la vista web (9)

Estoy intentando mostrar una imagen local en mi vista web:

String data = "<body>" + "<img src=/"file:///android_asset/large_image.png/"/></body>"; webview.loadData(data, "text/html", "UTF-8");

Este código no muestra nada, en lugar de:

webview.loadUrl("file:///android_asset/large_image.jpg");

Éste funciona, pero necesito tener una página web compleja, no solo una imagen.

Algunas ideas ?


Cargue el archivo Html en Webview y coloque su imagen en la carpeta de activos y lea ese archivo de imagen usando Html.

<html> <table> <tr> <td> <img src="abc.gif" width="50px" alt="Hello"> </td> </tr> </table> </html>

Ahora cargue ese archivo HTML en Webview

webview.loadUrl("file:///android_asset/abc.html");


Creo que falta un / en tu código

String data = "<body>" + "<img src=//"file:///android_asset/large_image.png/"/></body>";


La forma más simple y directa es crear un archivo html con un editor html como kompozer o lo que quieras.

Coloque su archivo html en la carpeta assets y llame a webView.loadUrl(filename) . La carpeta de activos también debe contener todas las imágenes a las que hace referencia en sus archivos html.

Corrija de antemano en el archivo html la ruta a sus imágenes de una manera que solo archive el nombre de archivo puro. El nombre de archivo que pase a loadUrl debe ir precedido de file:///android_asset/ .

Si la imagen o el archivo no se carga, verifique los nombres de los archivos en blanco , los guiones y otras cosas raras y cambie los nombres de los archivos.


También puedes probar

String data = "<body>" + "<img src=/"large_image.png/"/></body>"; webView.loadDataWithBaseURL("file:///android_asset/",data , "text/html", "utf-8",null);


Una manera conveniente (a menudo olvidada) es usar imágenes incrustadas base64 en contenido HTML. Esto también funcionará en navegadores Webkit móviles (IOS, Android ...).

El objetivo de este método es que puede incrustar imágenes en contenido HTML, en lugar de luchar con enlaces de imágenes desde la vista web al sistema de archivos restringido.

<img src="data:image/jpg;base64,xxxxxxxxxxxxxxxxxxxxxxxxxxxx"/> xxxxx = base64 encoded string of images bytes

Si desea proporcionar datos de imagen (base64 incrustados) del sistema de archivos, puede, por ejemplo:

1) En Android use ContentProvider, que proporcionará cadenas de imágenes con formato base64.

<img src="content://.............."/>

2) O puede preprocesar HTML con JSOUP o un analizador DOM similar (antes de configurarlo en la vista web) y ajustar el src de la imagen con la imagen codificada base64 adecuada.

Las desventajas de este método son los gastos generales incluidos en la conversión de la imagen a la cadena base64 y, por supuesto, en la obtención de datos HTML más grandes para la vista web.


Usa este método

mview.loadDataWithBaseURL(folder.getAbsolutePath(), content, "text/html", "windows-1252", "");

folder.getAbsolutePath() puede ser "file:///android_asset" o simplemente "/"


el mejor enfoque para mí fue crear mi archivo .html con todos los textos e imágenes en MS Word, guardar el archivo como un archivo .html y copiar el archivo .html y la carpeta de adjuntos correspondiente en la carpeta de activos y dar la dirección de .html file in asset folder to webview.loadUrl() ... Aquí está lo que necesita hacer ...

WebView webview = (WebView) findViewById(R.id.webView1); webview.loadUrl("file:///android_asset/learning1/learning1.htm");


La solución de Zain funcionó para mí. Olvidé agregar mi carpeta www con archivos HTML y otras subcarpetas de css e imágenes, etc.

webView.loadDataWithBaseURL("file:///android_asset/www/",data , "text/html", "utf-8",null);

..


webView.loadDataWithBaseURL("file:///android_asset/", sourse, "text/html", "UTF-8", null);