Caricamento file HTML esistente con Android WebView
-
26-09-2019 - |
Domanda
Ho fatto campioni provo, demo da codici di Google e di altre risorse con WebView
, ma quando cerco di farlo nel mio codice, non funziona per me.
Voglio carico myfile.html
che ho messo in attività cartella, e l'utilizzo di:
private WebView myWebView;
myWebView.loadUrl("file:///android_assets/myfile.html");
In caso di errore spettacoli emulatore
La pagina web all'indirizzo
file:///android_assets/myfile.html
non poteva essere caricato come: Il file richiesto non è stato trovato./android_assets/myfile.html
Quando ho messo il file nella cartella res/raw/
e utilizzando:
myWebView.loadUrl("file:///android_res/raw/myfile.html");
allora solo emulatore Android 2.2 API di livello 8 in grado di caricare il file, probabilmente, altre versioni più vecchie mostrano lo stesso errore. Mi sto perdendo qualcosa?
C'è un modo di caricare un file HTML esistente nel pacchetto di applicazione che funziona su tutte le versioni API?
Soluzione
ok, quello era il mio stupido errore. I post qui la risposta in caso qualcuno ha lo stesso problema.
Il percorso corretto per i file memorizzati in attività cartella è file:///android_asset/*
(senza "s" per le attività cartella che pensavo sempre deve avere una "s").
E, mWebView.loadUrl("file:///android_asset/myfile.html");
funziona sotto tutti i livelli di API.
Ancora non capire perché mWebView.loadUrl("file:///android_res/raw/myfile.html");
funziona solo a livello di API 8. Ma non importa ora.
Altri suggerimenti
incollare il file .html nella cartella Assets della cartella di progetto. e creare un file xml nella cartella di layout con il codice fol: 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"
/>
codice aggiuntivo fol nell'attività
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.
Se la struttura dovrebbe essere simile a questo:
/assets/html/index.html
/assets/scripts/index.js
/assets/css/index.css
Poi basta fare ( Android WebView: movimentazione cambia l'orientamento )
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());
}
Assicurati di aggiungere
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);
}
Poi basta usare 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">
Copiare e incollare il file HTML nella cartella delle attività del progetto e aggiungere sotto il codice nella tua attività su 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);
Si potrebbe leggere il file html manualmente e quindi utilizzare loadData
o loadDataWithBaseUrl
metodi di WebView di mostrarlo.
Il debug compilazione è diverso dal stampa uno, così:
Considerate la vostra struttura dei file di progetto del genere [ questo caso se per un debug assemblare ]:
src
|
debug
|
assets
|
index.html
Si dovrebbe chiamare index.html nel vostro WebView come:
WebView web=(WebView)findViewById(R.id.web);
web.loadUrl("file:///android_asset/index.html");
Il layout:
<WebView
android:id="@+id/web"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="top"/>
così via, per assemblare il rilascio, dovrebbe essere come:
src
|
release
|
assets
|
index.html