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?
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.
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.
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">
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);
Sie können die HTML-Datei manuell lesen und dann mit den WebView-Methoden loadData
oder loadDataWithBaseUrl
anzeigen.
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