J'ai essayé des exemples, des démonstrations de Google codes et d'autres ressources avec WebView
, mais lorsque j'essaie de le faire avec mon propre code, cela ne fonctionne pas pour moi.
Je veux charger myfile.html
que je mets dans le dossier assets, et en utilisant:
private WebView myWebView;
myWebView.loadUrl("file:///Android_assets/myfile.html");
L'émulateur montre une erreur
La page Web à l'adresse
file:///Android_assets/myfile.html
n'a pas pu être chargé car: Le fichier demandé n'a pas été trouvé./Android_assets/myfile.html
Quand je mets ce fichier à res/raw/
dossier et en utilisant:
myWebView.loadUrl("file:///Android_res/raw/myfile.html");
alors seulement émulateur Android 2.2 API niveau 8 peut charger le fichier probablement, les versions plus anciennes montrent la même erreur. Est-ce que je manque quelque chose?
Existe-t-il un moyen de charger un fichier .html existant dans le package d'application qui fonctionne sur toutes les versions de l'API?
ok, c'était ma très stupide erreur. Je poste la réponse ici au cas où quelqu'un aurait le même problème.
Le chemin correct pour les fichiers stockés dans le dossier assets est file:///Android_asset/*
(Sans "s" pour le dossier assets, ce qui me faisait toujours penser qu'il doit avoir un "s").
Et mWebView.loadUrl("file:///Android_asset/myfile.html");
fonctionne sous tous les niveaux d'API.
Je ne comprends toujours pas pourquoi mWebView.loadUrl("file:///Android_res/raw/myfile.html");
ne fonctionne que sur l'API de niveau 8. Mais peu importe maintenant.
collez votre fichier .html dans le dossier assets de votre dossier de projet. et créez un fichier xml dans le dossier de présentation avec le code suivant: 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 du code fol dans l'activité
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 devrait être comme ça:
/assets/html/index.html
/assets/scripts/index.js
/assets/css/index.css
Ensuite, il suffit de faire ( Android WebView: gérer les changements d’orientation )
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 d'ajouter
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, utilisez simplement les URL
<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 le dossier des ressources de votre projet et ajoutez le code ci-dessous 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 manuellement, puis utiliser les méthodes loadData
ou loadDataWithBaseUrl
de WebView pour l'afficher.
La compilation debug compilation est différente de la version release, donc:
Considérez votre structure de fichier Project comme ceci [ ce cas si pour un assemblage Debug ]:
src
|
debug
|
assets
|
index.html
Vous devez appeler index.html dans votre WebView comme suit:
WebView web=(WebView)findViewById(R.id.web);
web.loadUrl("file:///Android_asset/index.html");
La disposition:
<WebView
Android:id="@+id/web"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_gravity="top"/>
Ainsi, pour que la Release assemble, cela devrait ressembler à:
src
|
release
|
assets
|
index.html