android android-webview android-assets

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.