Ответ 1
Ну, короткий ответ заключается в том, что он очень похож на shouldOverrideUrlLoading(WebView view, String url)
, как показано в учебнике WebView.
Чтобы начать работу, см. код ниже. Вы просто переопределяете метод shouldInterceptRequest(WebView view, String url)
вашего WebViewClient. Очевидно, вам не нужно делать это inline, но ради компактности, что я сделал:
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 view, String url)
, чтобы не загружать страницу, извлекать ее вручную, заменять ссылку на файл css своим собственным и наконец, вызовите loadData(String data, String mimeType, String encoding)
(или loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl)
) в WebView, передав управляемое содержимое html как строку.
До:
После: