2011-05-25 22 views
47

Estoy intentando diplay una imagen local en mi vista web:Android - imagen local en 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"); 

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

¿Alguna idea?

+0

mejor crear un archivo HTML y ponerlo en la carpeta de activos y acceder a ella desde la carpeta de activos –

Respuesta

60

Cargar archivo HTML en vista Web y puso su imagen en la carpeta de recursos y lea ese archivo de imagen utilizando HTML.

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

Ahora carga el archivo HTML en Webview

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

Exactamente lo que necesito, gracias –

+0

Explicación perfecta ... – Mihir

+7

¿Qué sucede si la imagen está en otra carpeta del activo? –

1

Creo que hay una \ que falta en su código

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

con dos "\", eclipse no quiere compilar: s he encontrado una solución: webview.loadDataWithBaseURL ("falso : // w/t/f ", datos, mimeType, codificación, nulo); Parece que loadData() se buggued ... –

8

utilizar este método.

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

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

+1

¿qué es contenido aquí? – jhegedus

+0

contenido es texto HTML real como ... –

25

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

El punto de uso de este método es que puede incrustar imágenes en contenido HTML, en lugar de luchar con enlaces de imágenes de webview a un sistema de archivos restringido.

<img src="data:image/jpg;base64,xxxxxxxxxxxxxxxxxxxxxxxxxxxx"/> 

    xxxxx = base64 encoded string of images bytes 

Si desea proporcionar (base 64) embebidos datos de imagen de sistema de archivos, que puede por ejemplo:

1) En el uso de Android ContentProvider - que proporcionará base64 con formato de imagen cadenas.

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

2) O puede preprocesar HTML con JSOUP o analizador DOM similar (antes de dejarla a vista web) y ajustar src imagen con la imagen correctamente base64.

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.

+2

Hola, ¿Puede dar un ejemplo con la presente línea completa: Derzu

+0

Esta técnica sólo es útil si el WebView tiene loadDataWithBaseURl' donde la URL base no es 'file: // ... '. – rds

44

También puede probar

String data = "<body>" + "<img src=\"large_image.png\"/></body>"; 

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

Creo que este es el método más rápido, especialmente si todo lo que necesita es mostrar solo una imagen. Gracias) –

+0

Estoy generando archivos html usando código y necesito usar imágenes locales en la carpeta de activos. Intenté otros métodos pero no funcionaron. El tuyo funciona a la perfección. – Ray

0

enter image description here

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

el mejor enfoque para mí era crear mi archivo .html con todos los textos e imágenes en formato MS Word y guardar el archivo como una .html archiva y copia el archivo .html y la carpeta de adjuntos correspondiente en la carpeta de activos y proporciona la dirección del archivo .html en la carpeta de recursos al webview.loadUrl() ... Aquí es lo que debes hacer ...

WebView webview = (WebView) findViewById(R.id.webView1); 

webview.loadUrl("file:///android_asset/learning1/learning1.htm"); 
0

Zain's solution funcionó para mí. Se me olvidó añadir mi carpeta www tener archivos HTML y otras subcarpetas de CSS e imágenes etc.

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

..

0

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

Deja tus archivos HTML en la carpeta de activos y llamar webView.loadUrl(filename). La carpeta de activos también debe contener todas las imágenes a las que hace referencia en sus archivos html.

correcta con antelación en el archivo HTML de la ruta a las imágenes de una manera, que sólo se presenta abajo el nombre del archivo pura. El nombre de archivo que pase a loadUrl debe tener el prefijo file:///android_asset/.

Si la imagen o el archivo no se carga, comprobar los nombres de archivo para los espacios en blanco , guión y otra materia extraña y cambiar los nombres de archivo.

Cuestiones relacionadas