Cargando archivo .html existente con Android WebView
-
26-09-2019 - |
Pregunta
Me hicieron muestras intento, demos de códigos de Google y otros recursos con WebView
, pero cuando trato de hacerlo en mi propio código, no funciona para mí.
Quiero myfile.html
carga que puse en activos carpeta, y el uso de:
private WebView myWebView;
myWebView.loadUrl("file:///android_assets/myfile.html");
En caso de error shows emulador
La página web en
file:///android_assets/myfile.html
no podía ser carga como: No se encontró el archivo solicitado./android_assets/myfile.html
Cuando puse ese archivo a la carpeta res/raw/
y usar:
myWebView.loadUrl("file:///android_res/raw/myfile.html");
entonces sólo emulador de Android 2.2 API de nivel 8 puede cargar el archivo probablemente, otras versiones anteriores muestran el mismo error. Me estoy perdiendo algo?
¿Hay alguna manera de cargar un archivo .html existentes en el paquete de aplicación que funciona en todas las versiones de la API?
Solución
bien, ese fue mi error muy estúpido. Puedo publicar la respuesta aquí por si alguien tiene el mismo problema.
La ruta correcta para los archivos almacenados en la carpeta de activos es file:///android_asset/*
(sin "s" para los activos de la carpeta que siempre estaba pensando que debe tener una "s").
Y, mWebView.loadUrl("file:///android_asset/myfile.html");
funciona bajo todos los niveles de la API.
Todavía no entender por qué mWebView.loadUrl("file:///android_res/raw/myfile.html");
sólo funciona en el nivel API 8. Pero no importa ahora.
Otros consejos
pegue el archivo .html en activos carpeta de la carpeta del proyecto. y crear un archivo XML en la carpeta de diseño con el código 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"
/>
código de complemento de la actividad fol
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.
Si su estructura debe ser como este:
/assets/html/index.html
/assets/scripts/index.js
/assets/css/index.css
A continuación, sólo hacer ( Android WebView: manejo de los cambios de orientación )
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());
}
Asegúrese de agregar
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);
}
A continuación, sólo tiene que utilizar las direcciones 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">
copiar y pegar los archivos .html en el activo carpeta de su proyecto y añadir a continuación el código en tu actividad en 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);
Se puede leer el archivo HTML de forma manual y luego usar loadData
o loadDataWithBaseUrl
métodos de WebView mostrarlo.
La depuración compilación es diferente de la versión una, así:
Tenga en cuenta su estructura de archivos de proyecto como ese [ este caso, si para una depuración montar ]:
src
|
debug
|
assets
|
index.html
Se debe llamar index.html en su WebView como:
WebView web=(WebView)findViewById(R.id.web);
web.loadUrl("file:///android_asset/index.html");
El diseño:
<WebView
android:id="@+id/web"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="top"/>
Así que presenta, para montar el lanzamiento, así debería ser:
src
|
release
|
assets
|
index.html