web-dev-qa-db-fra.com

Chargement du fichier .html existant avec Android WebView

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?

83
laph

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.

153
laph

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.
17
Naresh

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">
13
EpicPandaForce

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);
6
Arunkumar

Vous pouvez lire le fichier html manuellement, puis utiliser les méthodes loadData ou loadDataWithBaseUrl de WebView pour l'afficher.

2
Lachezar

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  
1
PYK