Что ж, краткий ответ заключается в том, что он работает очень похоже на 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 ByteArrayInputStream("body { background-color: #F781F3; }".getBytes()));
}
/**
* 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-содержимое в виде строки.
До:
После:
![After](https://i.stack.imgur.com/9CDPk.png)