Frage

Ich habe versucht, Proben, Demos von Google-Codes und anderen Ressourcen mit WebView, aber wenn ich versuche, es in meinem eigenen Code zu tun, es funktioniert nicht für mich.

Ich möchte Last myfile.html, die ich in Vermögenswerte setzen Ordner, und mit:

private WebView myWebView;

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

Ein Emulator zeigt Fehler

  

Die Webseite unter file:///android_assets/myfile.html konnte nicht sein   geladen, wie: Die angeforderte Datei wurde nicht gefunden.   /android_assets/myfile.html

Wenn ich bringe diese Datei zu res/raw/ Ordnern und mit:

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

dann nur Emulator Android 2.2 API-Ebene 8 wahrscheinlich die Datei laden kann, andere ältere Versionen zeigen die gleichen Fehler. Ich bin etwas fehlt?

Gibt es eine Möglichkeit eine vorhandene HTML-Datei in dem Anwendungspaket zu laden, die auf allen API-Versionen funktionieren?

War es hilfreich?

Lösung

ok, das war meine sehr dummen Fehler. Ich poste hier die Antwort für den Fall, jemand hat das gleiche Problem.

Der richtige Pfad für Dateien in Assets gespeichert Ordner file:///android_asset/* ist (ohne „s“ für Vermögenswerte Ordner die ich immer es dachte, muss ein „s“ haben).

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

ich noch nicht herausfinden, warum mWebView.loadUrl("file:///android_res/raw/myfile.html"); nur auf API-Ebene funktioniert 8. Aber es ist jetzt egal.

Andere Tipps

fügen Sie Ihre HTML-Datei in Vermögenswerte von Ihrem Projektordner Ordner. und erstellen Sie eine XML-Datei in der Layout-Ordner mit dem fol-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"
    />

Add fol Code in Aktivität

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.

Wenn Sie Ihre Struktur wie folgt sein sollte:

/assets/html/index.html

/assets/scripts/index.js

/assets/css/index.css

Dann einfach tun ( Android WebView: Umgang mit Orientierungsänderungen )

    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, fügen Sie

    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 nur URLs verwenden

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

Kopieren und einfügen Ihrer HTML-Datei in dem Vermögen von Ihrem Projektordner und unter Code in Ihren Aktivitäten auf onCreate () hinzuzufügen.

        WebView view = new WebView(this);
        view.getSettings().setJavaScriptEnabled(true);
        view.loadUrl("file:///android_asset/**YOUR FILE NAME**.html");
        view.setBackgroundColor(Color.TRANSPARENT);
        setContentView(view);

Sie können die HTML-Datei manuell lesen und dann loadData oder loadDataWithBaseUrl Methoden des WebView verwenden, es zu zeigen.

Die Debug-Kompilation unterscheidet sich von der Release ein, so:

Betrachten Sie Ihre Projektdateistruktur wie die [ dieser Fall, wenn für eine Debug montieren ]:

src
  |
  debug
      |
      assets
           |
           index.html

Sie sollten index.html in Ihre WebView nennen wie:

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"/>

So her, für die Veröffentlichung zusammenstellen, sollte es sein wie:

src
  |
  release
        |
        assets
             |
             index.html  
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top