Chargement .html existant avec Android WebView
-
26-09-2019 - |
Question
J'ai fait des échantillons d'essai, des démonstrations de codes Google et d'autres ressources avec WebView
, mais lorsque je tente de le faire dans mon propre code, il ne fonctionne pas pour moi.
Je veux charger myfile.html
que je mets dans le dossier des actifs, et en utilisant:
private WebView myWebView;
myWebView.loadUrl("file:///android_assets/myfile.html");
En cas d'erreur SHOWS de l'émulateur
La page Web à l'adresse
file:///android_assets/myfile.html
ne pouvait pas être chargé comme: Le fichier demandé n'a pas été trouvé./android_assets/myfile.html
Quand je mets ce fichier dans le dossier res/raw/
et en utilisant:
myWebView.loadUrl("file:///android_res/raw/myfile.html");
alors que l'émulateur Android 2.2 niveau de l'API 8 peut charger le fichier probablement, d'autres versions plus anciennes montrent la même erreur. Est-ce que je manque quelque chose?
Est-il possible de charger un fichier .html existant dans le package d'application qui fonctionne sur toutes les versions de l'API?
La solution
ok, ce fut mon erreur stupide. Je posterai la personne réponse ici juste cas a le même problème.
Le chemin correct pour les fichiers stockés dans le dossier des actifs est file:///android_asset/*
(sans « s » pour les actifs dossier que je pensais toujours qu'il doit avoir un « s »).
Et, travaille mWebView.loadUrl("file:///android_asset/myfile.html");
sous tous les niveaux de l'API.
Je comprends toujours pas pourquoi mWebView.loadUrl("file:///android_res/raw/myfile.html");
ne fonctionne que sur le niveau de l'API 8. Mais il n'a pas d'importance maintenant.
Autres conseils
coller votre fichier .html dans le dossier actif de votre dossier de projet. et créer un fichier xml dans le dossier de mise en page avec le code fol: my.xml:
<WebView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
Ajouter un code de l'activité fol
setContentView(R.layout.my);
WebView mWebView = null;
mWebView = (WebView) findViewById(R.id.webview);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl("file:///android_asset/new.html"); //new.html is html file name.
Si votre structure doit ressembler à ceci:
/assets/html/index.html
/assets/scripts/index.js
/assets/css/index.css
Alors il suffit de faire ( Android WebView: changements d'orientation de manipulation )
if(WebViewStateHolder.INSTANCE.getBundle() == null) { //this works only on single instance of webview, use a map with TAG if you need more
webView.loadUrl("file:///android_asset/html/index.html");
} else {
webView.restoreState(WebViewStateHolder.INSTANCE.getBundle());
}
Assurez-vous que vous ajoutez
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
webSettings.setAllowFileAccessFromFileURLs(true);
webSettings.setAllowUniversalAccessFromFileURLs(true);
}
Ensuite, il suffit d'utiliser urls
<html>
<head>
<meta charset="utf-8">
<title>Zzzz</title>
<script src="../scripts/index.js"></script>
<link rel="stylesheet" type="text/css" href="../css/index.css">
Copiez et collez votre fichier .html dans les actifs dossier de votre projet et ajoutez ci-dessous le code dans votre activité sur onCreate ().
WebView view = new WebView(this);
view.getSettings().setJavaScriptEnabled(true);
view.loadUrl("file:///android_asset/**YOUR FILE NAME**.html");
view.setBackgroundColor(Color.TRANSPARENT);
setContentView(view);
Vous pouvez lire le fichier html utiliser manuellement et méthodes de loadData
ou loadDataWithBaseUrl
de WebView pour le montrer.
débogage compilation est différent du version un, donc:
Considérez votre structure de fichiers de projet comme [ ce cas, si un assemblez Debug ]:
src
|
debug
|
assets
|
index.html
Vous devriez appeler index.html dans votre WebView comme:
WebView web=(WebView)findViewById(R.id.web);
web.loadUrl("file:///android_asset/index.html");
La mise en page:
<WebView
android:id="@+id/web"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="top"/>
ainsi de suite, pour l'assemblage de presse, il devrait être comme:
src
|
release
|
assets
|
index.html