webentwicklung-frage-antwort-db.com.de

Laden der vorhandenen HTML-Datei mit Android WebView

Ich habe mit WebView Beispiele, Demos von Google-Codes und andere Ressourcen ausprobiert, aber wenn ich versuche, es in meinem eigenen Code zu tun, funktioniert es bei mir nicht.

Ich möchte myfile.html Laden, das ich in den Assets-Ordner lege und verwende:

private WebView myWebView;

myWebView.loadUrl("file:///Android_assets/myfile.html");

Am Emulator wird ein Fehler angezeigt

Die Webseite unter file:///Android_assets/myfile.html Konnte nicht geladen werden als: Die angeforderte Datei wurde nicht gefunden. /Android_assets/myfile.html

Wenn ich diese Datei in den Ordner res/raw/ Lege und verwende:

myWebView.loadUrl("file:///Android_res/raw/myfile.html");

dann kann nur der Emulator Android 2.2 API Level 8 die Datei wahrscheinlich laden, andere ältere Versionen zeigen den gleichen Fehler. Vermisse ich etwas?

Gibt es eine Möglichkeit, eine vorhandene HTML-Datei im Anwendungspaket zu laden, die für alle API-Versionen funktioniert?

83
laph

ok, das war mein blöder fehler. Ich poste die Antwort hier nur für den Fall, dass jemand das gleiche Problem hat.

Der korrekte Pfad für Dateien, die im Assets-Ordner gespeichert sind, lautet file:///Android_asset/* (Mit keinem "s" für den Assets-Ordner, von dem ich immer dachte, dass er ein "s" haben muss).

Und mWebView.loadUrl("file:///Android_asset/myfile.html"); funktioniert unter allen API-Ebenen.

Ich weiß immer noch nicht, warum mWebView.loadUrl("file:///Android_res/raw/myfile.html"); nur auf API-Ebene 8 funktioniert. Aber das spielt jetzt keine Rolle.

153
laph

fügen Sie Ihre HTML-Datei in den Assets-Ordner Ihres Projektordners ein. und erstellen Sie eine XML-Datei im Layout-Ordner mit dem folgenden Code: 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"
    />

füge Fol Code in die Aktivität ein

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

Wenn Ihre Struktur so aussehen soll:

/assets/html/index.html

/assets/scripts/index.js

/assets/css/index.css

Dann machen Sie einfach ( Android WebView: Orientierungsänderungen behandeln )

    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());
    }

Stellen Sie sicher, dass Sie hinzufügen

    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);
    }

Dann benutze einfach 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">
13
EpicPandaForce

Kopieren Sie die HTML-Datei und fügen Sie sie in den Assets-Ordner Ihres Projekts ein. Fügen Sie den folgenden Code in Ihre Activity on onCreate () ein.

        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

Sie können die HTML-Datei manuell lesen und dann mit den WebView-Methoden loadData oder loadDataWithBaseUrl anzeigen.

2
Lachezar

Die Debug-Kompilierung unterscheidet sich von der Release, also:

Betrachten Sie Ihre Project-Dateistruktur wie folgt [ in diesem Fall, wenn für eine Debug-Assemblierung ]:

src
  |
  debug
      |
      assets
           |
           index.html

Sie sollten index.html in Ihrem WebView wie folgt aufrufen:

WebView web=(WebView)findViewById(R.id.web);
web.loadUrl("file:///Android_asset/index.html");

Das Layout:

<WebView
Android:id="@+id/web"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_gravity="top"/>

Für das Release-Assemble sollte es also so aussehen:

src
  |
  release
        |
        assets
             |
             index.html  
1
PYK