在WebView中显示Android资产文件?

我已经看到关于从资产提供WebView页面的问题的各种讨论,没有一个看起来是确定的。

我想能够使用webview来显示存储在项目资产中的html(和包含的css)文件。

我发现wv.loadUrl(“file:///android_asset/html_no_copy/demo_welcome.html”)显示该文件没问题,但在demo_welcome.html中的链接,无论是本地(没有URL前缀的文件名)或绝对 – 相同forms作为喂给loadUrl – 不工作。 他们得到一个“网页不可用”错误显示在视图上。

WebView wv = (WebView)this.findViewById(R.id.splashWebView); wv.loadUrl("file:///android_asset/html_no_copy/test.html"); // Works 

要么

 wv.loadUrl("file:///android_asset/html_no_copy/demo_welcome.html"); // Works 

但是demo_welcome.html中的以下任一链接均不起作用:

 <a href="test.html">CLICK HERE</a><p> <a href="file:///android_asset/html_no_copy/test.html">OR HERE</a> 

我知道我可以通过编写一个内容提供商来解决这个问题,但这似乎是极端的。

我希望这从SDK 1.6(4)起作用。

有谁知道这是否可以用HTML来完成,还是需要知道一些代码来加载数据?

Solutions Collecting From Web of "在WebView中显示Android资产文件?"

那么,我发现似乎有用的东西(1.6和2.2),尽pipe有一个警告,它会缓解。

我还发现,第一页和第二页内的CSS样式表链接都没有以下拦截工作。 奇怪,这让我有点紧张。 思考?

代码如下:

 WebView wv = (WebView)this.findViewById(R.id.splashWebView); wv.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); wv.loadUrl("file:///android_asset/html_no_copy/demo_welcome.html"); 

这是文件内容:

 demo_welcome.html: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Demo Html</title> <link rel="stylesheet" type="text/css" href="demo.css" /> </head> <body> <H1>Testing One Two Three</H1> <a href="test.html">CLICK HERE</a><p> <a href="file:///android_asset/html_no_copy/test.html">OR HERE</a> </body> </html> test.html: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <link rel="stylesheet" type="text/css" href="test.css" /> <title>Insert title here</title> </head> <body> <H1>TEST.HTML</H1> </body> </html> 

而不是loadUrl,请尝试使用loadDataWithBaseURL方法:

 wv.loadDataWithBaseURL("fake://not/needed", html, mimeType, encoding, "");