是否可以在我的 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 分别为 ios 和 android 添加 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,位于我项目的根目录中:
有人可以帮忙吗?提前致谢。
【问题讨论】:
由于它是基于程序集的嵌入式资源,因此将其作为字符串从程序集中读取出来,并在<style>
标记之间内联到您的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(*) 来查找只有红船的日子?