Cargando archivo.html existente con Android WebView
android-webview android-assets (7)
Intenté muestras, demos de códigos Google y otros recursos con WebView
, pero cuando intento hacerlo en mi propio código, no funciona para mí.
Quiero cargar myfile.html
que puse en la carpeta de activos y usando:
private WebView myWebView;
myWebView.loadUrl("file:///android_assets/myfile.html");
El emulador muestra un error
La página web en el
file:///android_assets/myfile.html
no se pudo cargar como: El archivo solicitado no se encontró./android_assets/myfile.html
Cuando pongo ese archivo en la carpeta res/raw/
y uso de:
myWebView.loadUrl("file:///android_res/raw/myfile.html");
entonces solo el emulador android 2.2 API nivel 8 puede cargar el archivo probablemente, otras versiones anteriores muestran el mismo error. ¿Me estoy perdiendo de algo?
¿Hay alguna forma de cargar un archivo .html existente en el paquete de la aplicación que funciona en todas las versiones de API?
Copie y pegue su archivo .html en la carpeta de activos de su proyecto y agregue el siguiente código en su 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);
La compilación de depuración es diferente de la versión de lanzamiento , por lo que:
Considere su estructura de archivo de proyecto así [en este caso si para un ensamblado de depuración ]:
src
|
main
debug
|
assets
|
index.html
Debería llamar index.html a 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"/>
Entonces, para el montaje de Release, debería ser como:
src
|
main
release
|
assets
|
index.html
Puede leer el archivo html manualmente y luego usar los métodos loadData
o loadDataWithBaseUrl
de WebView para mostrarlo.
Si su estructura debe ser así:
/assets/html/index.html
/assets/scripts/index.js
/assets/css/index.css
Entonces simplemente hazlo ( Android WebView: manejo de 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úrate 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);
}
Entonces solo usa las 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">
También asegúrate de no olvidar:
<uses-permission android:name="android.permission.INTERNET" />
bien, ese fue mi muy estúpido error. Publiqué la respuesta aquí en caso de que alguien tenga el mismo problema.
La ruta correcta para los archivos almacenados en la carpeta de activos es file:///android_asset/*
(sin "s" para la carpeta assets, que siempre pensé que debía tener una "s").
Y, mWebView.loadUrl("file:///android_asset/myfile.html");
funciona bajo todos los niveles de API.
Todavía no mWebView.loadUrl("file:///android_res/raw/myfile.html");
por qué mWebView.loadUrl("file:///android_res/raw/myfile.html");
funciona solo en API nivel 8. Pero no importa ahora.
pegue su archivo .html en la carpeta de activos de su carpeta de proyectos. y cree 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"
/>
agregar el código fol en la actividad
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.