Android 使用自定义HTML和预定义的基本URL将CSS文件从资源加载到Web视图

Android 使用自定义HTML和预定义的基本URL将CSS文件从资源加载到Web视图,android,html,css,webview,Android,Html,Css,Webview,我需要将运行时构建的一些HTML加载到WebView中,并将CSS文件应用到资产目录中的。我已经有了一个基本URL,我需要提供给webview的loadDataWithBaseURL函数 代码段(不应用CSS文件): StringBuffer buff=新的StringBuffer(); buff.追加(“”); buff.追加(“”); buff.追加(“”); buff.追加(“”); buff.append(“标题”); buff.追加(“”); buff.追加(“”); buff.追加(

我需要将运行时构建的一些HTML加载到WebView中,并将CSS文件应用到资产目录中的。我已经有了一个基本URL,我需要提供给webview的
loadDataWithBaseURL
函数

代码段(不应用CSS文件):

StringBuffer buff=新的StringBuffer();
buff.追加(“”);
buff.追加(“”);
buff.追加(“”);
buff.追加(“”);
buff.append(“标题”);
buff.追加(“”);
buff.追加(“”);
buff.追加(“”);
buff.append(“内容”);
buff.append(“”)
WebView.loadDataWithBaseURL(MY_BASE_URL,buff.toString(),“text/html”,HTTP.UTF_8,null);
我已经研究了这两个类似的问题&,但我的案例略有不同,因为我无法给出
file:///android_asset/
作为
loadDataWithBaseURL
函数的基本url


您知道如何在这种情况下应用CSS文件吗?

如果您想拦截来自
WebView
的一些请求,可以通过覆盖
WebViewClient
中的
shouldInterceptRequest()
来实现,如下所示:

 public WebResourceResponse shouldInterceptRequest (final WebView view, String url) {
        if (URLUtil.isFileUrl(url) && url.contains(".css")) {
            return getCssWebResourceResponseFromAsset();
        } else {
            return super.shouldInterceptRequest(view, url);
        }
    }
这里已经有一个非常详细的答案

但是 由于安全原因,如果您的基本url不是本地的,则无法访问本地文件。因此,请给出css的相对路径,然后拦截请求


我建议使用一种模式来区分b/w实际相对路径和自定义相对路径。e、 g.使用
android\u asset/my\u css\u file.css
而不是
my\u css\u file.css
,并相应地修改
shouldInterceptRequest()
,始终使用前面提到的代码拦截从
android\u asset开始的请求,并替换href=\”file:///android_asset/my_css_file.css\“with href=\“my\u css\u file.css\”我成功了。。thnx
 public WebResourceResponse shouldInterceptRequest (final WebView view, String url) {
        if (URLUtil.isFileUrl(url) && url.contains(".css")) {
            return getCssWebResourceResponseFromAsset();
        } else {
            return super.shouldInterceptRequest(view, url);
        }
    }