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.

Klaus Johan
la source
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

Joe
la source
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());
Ajesh
la source
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)

Khaintt
la source
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");
Jimale Abdi
la source
Quelle est la version de votre mobile?
Jimale Abdi