2011-05-25 8 views
47

Je suis en train de diplay une image locale dans mon WebView:Android - image locale dans WebView

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

Ce code n'affiche rien, au lieu de:

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

Celui-ci fonctionne , mais j'ai besoin d'avoir une page web complexe, pas seulement une image.

Des idées?

+0

mieux vous créer un fichier html et le mettre dans le dossier et l'accès des actifs à partir de dossier actifs –

Répondre

60

fichier Load Html dans Webview et mettre votre image dans le dossier d'actifs et lire ce fichier image à l'aide Html.

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

Chargez maintenant ce fichier Html dans Webview

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

Exactement ce dont j'ai besoin, merci –

+0

Explication parfaite ... – Mihir

+7

Et si l'image est dans un autre dossier de l'actif? –

1

Je pense qu'il ya un manque \ dans votre code

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

Avec deux « \ », Eclipse ne veut pas compiler: s j'ai trouvé une solution de contournement: webview.loadDataWithBaseURL ("faux : // w/t/f ", données, mimeType, encodage, null); Semble que loadData() est buggué ... –

8

Utilisez cette méthode.

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

folder.getAbsolutePath() peut être "file:///android_asset" ou tout simplement "/"

+1

quel est le contenu ici? – jhegedus

+0

Le contenu est du texte html réel comme ... –

25

Une façon pratique (souvent oubliée) est d'utiliser les images intégrées base64 dans le contenu HTML. Cela fonctionnera également sur les navigateurs Webkit mobiles (IOS, Android ..). Le point d'utilisation de cette méthode est que vous pouvez incorporer des images sur du contenu HTML, au lieu de vous battre avec des liens d'image de webview vers un système de fichiers restreint.

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

    xxxxx = base64 encoded string of images bytes 

Si vous voulez fournir (base64) intégrées des données d'image de système de fichiers, vous pouvez par exemple:

1) Lors de l'utilisation Android ContentProvider - qui fournira des chaînes d'image au format base64.

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

2) Ou vous pouvez prétraiter HTML avec analyseur DOM JSOUP ou similaire (avant la mise à WebView) et régler l'image avec l'image src base64 correctement encodée.

Les inconvénients de cette méthode sont les frais généraux inclus dans la conversion de l'image en chaîne base64 et, bien sûr, en générant des données HTML plus grandes pour la visualisation Web.

+2

Salut, Pouvez-vous donner un exemple avec la ligne complète: Derzu

+0

Cette technique est seulement utile si le WebView a loadDataWithBaseURl' où l'URL de base n'est pas 'fichier: // ... '. – rds

44

Vous pouvez également essayer

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

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

Je pense que c'est la méthode la plus rapide, surtout si tout ce dont vous avez besoin est d'afficher une seule image. Merci) –

+0

Je génère des fichiers html en utilisant du code et nécessaire pour utiliser des images locales dans le dossier de l'actif. J'ai essayé d'autres méthodes mais elles n'ont pas fonctionné. Le vôtre fonctionne parfaitement. – Ray

0

enter image description here

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

la meilleure approche pour moi était de créer mon dossier .html avec tous les textes et images dans MS Word et enregistrez le fichier en tant que .html fichier et copiant à la fois le fichier .html et le dossier des pièces jointes correspondant dans le dossier des actifs et en donnant l'adresse du fichier .html dans le dossier des actifs à webview.loadUrl() ... ici est ce que vous devez faire ...

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

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

Zain's solution travaillé pour moi. J'ai oublié d'ajouter mon dossier www avoir des fichiers HTML et d'autres sous-dossiers de css et des images, etc.

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

..

0

La façon la plus simple et directe est de créer un fichier HTML avec un éditeur html comme kompozer ou tout ce que vous aimez.

Placez votre fichier html dans le dossier assets et appelez webView.loadUrl(filename). Le dossier assets doit également contenir toutes les images que vous référencez dans vos fichiers html.

Corrigez à l'avance dans le fichier html le chemin vers vos images d'une manière, que vous ne fichier que le nom de fichier pur. Le nom de fichier que vous passez à loadUrl doit être précédé du préfixe file:///android_asset/.

Si l'image ou le fichier ne se charge pas, vérifiez les noms de fichiers pour blancs, trait d'union et d'autres trucs bizarres et changer les noms de fichiers.