2011-03-16 42 views
23

我已經看到關於從資產提供WebView頁面的問題的各種討論,但沒有一個看起來是確定的。在WebView中顯示Android資產文件?

我想能夠使用webview來顯示存儲在項目資產中的html(和包含的css)文件。

我發現wv.loadUrl(「file:///android_asset/html_no_copy/demo_welcome.html」)顯示該文件沒問題,但鏈接在demo_welcome.html中,無論是本地(沒有URL前綴的文件名)或絕對 - 與載入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來完成,還是需要知道一些代碼來加載數據?

回答

28

嗯,我發現了一些似乎可以工作的東西(在1.6和2.2上),儘管它警告說它會遞歸。

我還發現,第一個和第二個頁面內的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> 
8

,而不是使用loadURL,請嘗試使用loadDataWithBaseURL方法:

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

斯特凡嗨,什麼是HTML你傳入的對象?是第一個沒有使用的參數? – 2012-09-08 19:31:28

+0

+1這爲我工作。第一個參數只是一個假的基礎網址。它可以是任何東西。 'html'是包含HTML代碼的字符串。 – Kayla 2014-01-06 12:05:08

+2

髒,不回答問題。 – 2014-05-14 13:01:39

相關問題