Charger le fichier HTML dans WebView


189

J'ai une page html locale avec plusieurs autres ressources pointées par elle (fichiers css et bibliothèques Javascript) que je voudrais charger dans une WebView. Comment cela pourrait-il être réalisé ?

Peut-être pas la meilleure façon de procéder, mais j'expérimente toujours.


pour moi, cela a fonctionné si je supprimais le point html -webView.loadUrl ("file: /// android_asset / filename");
quemeful

4
Une raison pour laquelle vous ne voulez pas accepter la réponse de @ Joe?
ClassA

3
webview.loadUrl ("fichier: ///android_asset/sample.html"); - cliquez ici
c49

Réponses:


350

Le moyen le plus simple serait probablement de placer vos ressources Web dans le dossier des actifs, puis d'appeler:

webView.loadUrl("file:///android_asset/filename.html");

Pour une communication complète entre Java et Webview, voir ceci

Mise à jour: le dossier des actifs est généralement le dossier suivant: <project>/src/main/assets Cela peut être modifié dans le paramètre de configuration du dossier d'actifs de votre <app>.imlfichier comme:

<option name=”ASSETS_FOLDER_RELATIVE_PATH” value=”/src/main/assets” /> Voir l'article Où placer le dossier des ressources dans Android Studio


6
Ce problème est vraiment une FAQ.
shihpeng

2
Vous pourriez probablement également le charger sous forme de chaîne si vous êtes très défavorable à l'utilisation d'actifs ... (voir stackoverflow.com/questions/4543349/load-local-html-in-webview )
Joe

24
Cela devrait être marqué comme une bonne réponse, car c'est vraiment le cas.
gorodechnyj

6
@ SK9 Il en va de même si un autre élément ou fichier attendu est manquant, comme si vous modifiez le nom de votre classe d'activité de départ et ne mettez pas à jour AndroidManifest.xmlpour refléter cela. (Personnellement, je recommanderais de mettre l'URL / chemin du fichier dans des ressources de chaîne et d'y accéder à partir de là de telle sorte que le chemin soit avec toutes les autres données de chaîne du programme, mais ce n'est pas vraiment directement lié au problème de l'actif / dépendance des ressources.)
JAB

7
Pour ceux qui ne savent pas comment créer un dossier d'actifs, faites un clic droit sur "app" -> "Nouveau" -> "Dossier" -> "Dossier d'actifs", puis cliquez sur "Terminer". Android Studio créera le dossier des ressources dans le bon chemin. Et il vous suffit de déplacer votre fichier html vers le nouveau dossier de ressources. Référence: stackoverflow.com/questions/18302603/…
Yuchao Zhou

28

probablement cet exemple pourrait aider:

  WebView lWebView = (WebView)findViewById(R.id.webView);
  File lFile = new File(Environment.getExternalStorageDirectory() + "<FOLDER_PATH_TO_FILE>/<FILE_NAME>");
  lWebView.loadUrl("file:///" + lFile.getAbsolutePath());

3
dans l'exemple là-bas qui ont le html dans la mémoire externe, il est préférable de l'avoir emballé dans l'application
Jonathan García

1
"file: ///" est important lors de l'utilisation d'un fichier HTML à partir du répertoire de périphérique local. Merci
ralphgabb

5

Dans ce cas, il WebView#loadDataWithBaseUrl()vaut mieux utiliser WebView#loadUrl()!

webView.loadDataWithBaseURL(url, 
        data,
        "text/html",
        "utf-8",
        null);

url: url / path Chaîne pointant vers le répertoire de tous vos fichiers JavaScript et liens html ont leur origine. Si nul, il s'agit de: vide. data: Chaîne contenant votre fichier hmtl, lue avec BufferedReader par exemple

Plus d'informations: WebView.loadDataWithBaseURL (java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)


3
Qu'est-ce qu'une variable de données ? Veuillez donner un exemple.
IgorGanapolsky

0

La réponse acceptée ne fonctionne pas pour moi, c'est ce qui fonctionne pour moi

WebSettings webSetting = webView.getSettings();
    webSetting.setBuiltInZoomControls(true);
    webView1.setWebViewClient(new WebViewClient());

   webView.loadUrl("file:///android_asset/index.html");

Quelle est la version de votre mobile?
Jimale Abdi
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.