用Android WebView加载现有的.html文件
我曾尝试使用WebView
从Google代码和其他资源中尝试示例,演示,但是当我尝试在自己的代码中执行代码时,它不适用于我。
我想加载myfile.html
,我把资产文件夹,并使用:
private WebView myWebView; myWebView.loadUrl("file:///android_assets/myfile.html");
在模拟器上显示错误
file:///android_assets/myfile.html
的网页无法加载为:未find请求的文件。/android_assets/myfile.html
当我把这个文件res/raw/
文件夹,并使用:
myWebView.loadUrl("file:///android_res/raw/myfile.html");
那么只有模拟器的android 2.2 API级别8可能会加载该文件,其他旧版本显示相同的错误。 我错过了什么?
有什么方法可以在适用于所有API版本的应用程序包中加载现有的.html文件?
好吧,那是我非常愚蠢的错误。 我在这里发布答案,以防万一有人有同样的问题。
资产文件夹中存储文件的正确path是file:///android_asset/*
(资产文件夹没有“s”,我一直认为它必须有“s”)。
而且, mWebView.loadUrl("file:///android_asset/myfile.html");
在所有API级别下工作。
我仍然不知道为什么mWebView.loadUrl("file:///android_res/raw/myfile.html");
仅适用于API级别8,但现在没关系。
将您的.html文件粘贴到项目文件夹的assets文件夹中。 并使用以下代码在布局文件夹中创build一个xml文件: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" />
在活动中添加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.
将.html文件复制并粘贴到项目的assets文件夹中,并在onCreate()的Activity上添加下面的代码。
WebView view = new WebView(this); view.getSettings().setJavaScriptEnabled(true); view.loadUrl("file:///android_asset/**YOUR FILE NAME**.html"); view.setBackgroundColor(Color.TRANSPARENT); setContentView(view);
如果你的结构应该是这样的:
/assets/html/index.html
/assets/scripts/index.js
/assets/css/index.css
然后,只要( Android WebView:处理方向更改 )
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()); }
确保你添加
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); }
然后只需使用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">
您可以手动读取html文件,然后使用WebView的loadData
或loadDataWithBaseUrl
方法来显示它。
另外请确保你不要忘记:
<uses-permission android:name="android.permission.INTERNET" />