Laden vorhandene HTML-Datei mit Android WebView
-
26-09-2019 - |
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?
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