那么简短的答案是它的工作原理与shouldOverrideUrlLoading(WebView视图,String url)非常相似,如
WebView tutorial所示。
要开始使用,请参阅下面的代码。您只需覆盖WebViewClient的shouldInterceptRequest(WebView视图,String url)方法即可。显然,你不必在线,但是为了紧凑,这就是我所做的:
WebView webview = (WebView) findViewById(R.id.webview);
webview.setWebViewClient(new WebViewClient() {
@Override
public WebResourceResponse shouldInterceptRequest (final WebView view, String url) {
if (url.contains(".css")) {
return getCssWebResourceResponseFromAsset();
} else {
return super.shouldInterceptRequest(view, url);
}
}
/**
* Return WebResourceResponse with CSS markup from a String.
*/
@SuppressWarnings("deprecation")
private WebResourceResponse getCssWebResourceResponseFromString() {
return getUtf8EncodedCssWebResourceResponse(new StringBufferInputStream("body { background-color: #F781F3; }"));
}
/**
* Return WebResourceResponse with CSS markup from an asset (e.g. "assets/style.css").
*/
private WebResourceResponse getCssWebResourceResponseFromAsset() {
try {
return getUtf8EncodedCssWebResourceResponse(getAssets().open("style.css"));
} catch (IOException e) {
return null;
}
}
/**
* Return WebResourceResponse with CSS markup from a raw resource (e.g. "raw/style.css").
*/
private WebResourceResponse getCssWebResourceResponseFromRawResource() {
return getUtf8EncodedCssWebResourceResponse(getResources().openRawResource(R.raw.style));
}
private WebResourceResponse getUtf8EncodedCssWebResourceResponse(InputStream data) {
return new WebResourceResponse("text/css", "UTF-8", data);
}
});
webview.loadUrl("http://stackoverflow.com");
捕获加载的css文件,并返回自己的WebResourceResponse,其中包含要加载的数据。
请注意,此方法需要API级别11。
如果您想为Android 2.x做类似的操作,可能需要尝试使用前面提到的shouldOverrideUrlLoading(WebView视图,String url)来避免加载页面,手动抓取,将您自己的css文件的引用替换为,然后在WebView上调用loadData(String data,String mimeType,String encoding)(或loadDataWithBaseURL(String baseUrl,String data,String mimeType,String encoding,String historyUrl)),并将其作为一个字符串传递给操作的html内容。
之前:
后: