是否可以在我的 Assets 文件夹中仅使用一个样式表将自定义 CSS 添加到 Xamarin 中的 WebView?

Posted

技术标签:

【中文标题】是否可以在我的 Assets 文件夹中仅使用一个样式表将自定义 CSS 添加到 Xamarin 中的 WebView?【英文标题】:Is it possible to add custom CSS to a WebView in Xamarin using ONLY ONE stylesheet in my Assets folder? 【发布时间】:2019-10-13 08:47:35 【问题描述】:

我见过多个 tutorials 分别为 iosandroid 添加 GetBaseUrl,但他们没有回答我的问题。我想知道是否没有其他方法可以将自定义 CSS 添加到 webview 并且只使用 1 个样式表(default.css)。我之所以要这样做是因为我的样式表对于 IOS 和 Android 都是相同的,并且包含的​​样式很少。

这是我尝试过的: 我有一个 WebView:

 <WebView.Source >
        <htmlWebViewSource Html="Binding Data.Content" />
    </WebView.Source>

此 WebView 的 Source 是一个字符串,如下所示:

string  contentString =   @"<html>
                            <head>" +
                            "<link rel='stylesheet' href='default.css'" 
                            "</head>" +
                            "<body style='text-align:left;background-color:white;font-size:16px;margin:0;'>" +
                            value +
                            "</body>" +
                            "</html>";

上面提到的 default.css 文件在我的 Assets 文件夹中,并且有 Build Action EmbeddedResource,位于我项目的根目录中:

有人可以帮忙吗?提前致谢。

【问题讨论】:

由于它是基于程序集的嵌入式资源,因此将其作为字符串从程序集中读取出来,并在&lt;style&gt; 标记之间内联到您的html 中 您好,感谢您的回答。我不知道该怎么做。你能给我一个提示吗? 【参考方案1】:

有一些方法可以做到这一点,一种是使用HtmlWebViewSource,html是这样的:

htmlSource.Html = @"<html>
<head>
<link rel=""stylesheet"" href=""default.css"">
</head>
<body>
<h1>Xamarin.Forms</h1>
<p>The CSS and image are loaded from local files!</p>
<img src='XamarinLogo.png'/>
<p><a href=""local.html"">next page</a></p>
</body>
</html>";

另一种方法是使用WebView.loadDataWithBaseURL,有同一个线程可以看看:

Rendering HTML in a WebView with custom CSS

【讨论】:

【参考方案2】:

最简单的方法是用 CSS 包装您的 HTML(或将 链接标签 替换为其生成的内容)

var html = AddHtmlAndCssTags("<div>my html</div>", ReadCss());





protected string ReadCss()

    var resourceName = $"MyProj.Resources.Css.article.css";
    var isExists = ResourceLoader.IsEmbeddedResourceExists(Assembly.GetAssembly(typeof(ResourceLoader)), resourceName);

    if (isExists)
    
        return ResourceLoader.GetEmbeddedResourceString(Assembly.GetAssembly(typeof(ResourceLoader)), resourceName);
    

        return string.Empty;
    

    protected string AddHtmlAndCssTags(string html, string css)
    
        var cssTag = string.IsNullOrEmpty(css) ? string.Empty : $"<style>css</style>";
        return $"<html><head>cssTag</head><body>html<body></html>";
    

【讨论】:

以上是关于是否可以在我的 Assets 文件夹中仅使用一个样式表将自定义 CSS 添加到 Xamarin 中的 WebView?的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的查询中仅使用 COUNT(*) 来查找只有红船的日子?

是否可以在 Firebase 中仅接受来自我的应用程序的函数调用?

从 hsqldb 备份中仅导入特定行

如何使用 api 在谷歌地图中仅显示一个国家或特定区域?

如何在我的应用程序中仅打印一次警报视图?

是否可以在通用应用程序中仅使用一个故事板为 iPod 和 iPad 提供不同数量的视图控制器?