Xamarin Forms UWP 中的 FontAwesome
FontAwesome in Xamarin forms UWP
我有一个自定义渲染器在 Android 中与 Fontawesome 一起工作。
我正在遵循本指南 using font awesome in UWP
使用自定义标签类型尝试让 Fontawesome 在 UWP 中工作。
public class FontAwesomeLabel: Xamarin.Forms.Label {
public FontAwesomeLabel() {
switch (Device.RuntimePlatform)
{
case Device.UWP:
FontFamily = @"/Assets/FontAwesome.otf#FontAwesome";
break;
}
}
}
字体
被加载为 ttf 和 otf。我已经尝试了两种类型。
他们 Assest 字体具有构建操作 "Content"
mainView.Children.Add( new FontAwesomeLabel()
{Text = FaConstPool.FASearch ,FontSize = 40});
public static string FASearch = "\uf002";
仅适用于 Android 而不适用于 UWP
我看到一个奇怪的方框,而不是 Android 预期的 Fontawesome 图标。
知道我做错了什么吗?
在 UWP 上添加字体的正确路径是 /Assets/Fonts/FontAwesome.ttf#FontAwesome
看来您必须添加 Fonts
文件夹。
像这样:
此外,您可以使用 Iconize plugin 并检查此答案:
问题的解决办法原来是在UWP中,使用正确的字体家族名称。
Font Awesome 5 Free Solid
而不仅仅是 "FontAwesome"
// FontFamily = @"/Assets/FontAwesome.otf#FontAwesome"; // incorrect font family name
FontFamily = @"/Assets/Fonts/FontAwesome.otf#Font Awesome 5 Free Solid";
任何对细节感兴趣的人:
我下载了一个字体编辑器来检查内部字体名称和字体系列名称。我错误地复制了使用 similar/older 字体值的博客文章。实际内容见图片。
我有两种解决方案:
1) 共享代码/.netStandard Common 项目中的自定义控件。
2) 自定义渲染器
解决方案 1:自定义标签
public class FontAwesomeLabel: Xamarin.Forms.Label
{
public FontAwesomeLabel()
{
switch (Device.RuntimePlatform)
{
case Device.UWP:
// make sure the correct font family name is used. Check in a font editor
this.FontFamily = @"/Assets/Fonts/FontAwesome.otf#Font Awesome 5 Free Solid";
break;
}
}
}
解决方案 2:标准控件上的客户渲染器
[assembly: ExportRenderer(typeof(Label), typeof(FontAwesomeLabelRenderer))]
namespace Oxando.UWP.CustomRenderers
{
public class FontAwesomeLabelRenderer : LabelRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
{
base.OnElementChanged(e);
if (Control != null)
{
// on UWP be sure use the Font Family name.
// get a font editor and check the name, if it doesnt match UWP wont load it
if (FontAwesomeUtil.CheckIsFA(e.NewElement.Text))
{
Control.FontFamily = new FontFamily("/Assets/Fonts/FontAwesome.otf#Font Awesome 5 Free Solid");
}
}
}
}
internal static class FontAwesomeUtil
{
public static bool CheckIsFA(string text)
{
if (text.Length == 0) return false;
if (text.Length > 1 || text[0] < 0xf000) return false;
return true;
}
}
}
字体编辑器中显示的实际内部名称
我有一个自定义渲染器在 Android 中与 Fontawesome 一起工作。 我正在遵循本指南 using font awesome in UWP 使用自定义标签类型尝试让 Fontawesome 在 UWP 中工作。
public class FontAwesomeLabel: Xamarin.Forms.Label {
public FontAwesomeLabel() {
switch (Device.RuntimePlatform)
{
case Device.UWP:
FontFamily = @"/Assets/FontAwesome.otf#FontAwesome";
break;
}
}
}
字体
被加载为 ttf 和 otf。我已经尝试了两种类型。
他们 Assest 字体具有构建操作 "Content"
mainView.Children.Add( new FontAwesomeLabel()
{Text = FaConstPool.FASearch ,FontSize = 40});
public static string FASearch = "\uf002";
仅适用于 Android 而不适用于 UWP
我看到一个奇怪的方框,而不是 Android 预期的 Fontawesome 图标。
知道我做错了什么吗?
在 UWP 上添加字体的正确路径是 /Assets/Fonts/FontAwesome.ttf#FontAwesome
看来您必须添加 Fonts
文件夹。
像这样:
此外,您可以使用 Iconize plugin 并检查此答案:
问题的解决办法原来是在UWP中,使用正确的字体家族名称。 Font Awesome 5 Free Solid 而不仅仅是 "FontAwesome"
// FontFamily = @"/Assets/FontAwesome.otf#FontAwesome"; // incorrect font family name
FontFamily = @"/Assets/Fonts/FontAwesome.otf#Font Awesome 5 Free Solid";
任何对细节感兴趣的人:
我下载了一个字体编辑器来检查内部字体名称和字体系列名称。我错误地复制了使用 similar/older 字体值的博客文章。实际内容见图片。
我有两种解决方案:
1) 共享代码/.netStandard Common 项目中的自定义控件。
2) 自定义渲染器
解决方案 1:自定义标签
public class FontAwesomeLabel: Xamarin.Forms.Label
{
public FontAwesomeLabel()
{
switch (Device.RuntimePlatform)
{
case Device.UWP:
// make sure the correct font family name is used. Check in a font editor
this.FontFamily = @"/Assets/Fonts/FontAwesome.otf#Font Awesome 5 Free Solid";
break;
}
}
}
解决方案 2:标准控件上的客户渲染器
[assembly: ExportRenderer(typeof(Label), typeof(FontAwesomeLabelRenderer))]
namespace Oxando.UWP.CustomRenderers
{
public class FontAwesomeLabelRenderer : LabelRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
{
base.OnElementChanged(e);
if (Control != null)
{
// on UWP be sure use the Font Family name.
// get a font editor and check the name, if it doesnt match UWP wont load it
if (FontAwesomeUtil.CheckIsFA(e.NewElement.Text))
{
Control.FontFamily = new FontFamily("/Assets/Fonts/FontAwesome.otf#Font Awesome 5 Free Solid");
}
}
}
}
internal static class FontAwesomeUtil
{
public static bool CheckIsFA(string text)
{
if (text.Length == 0) return false;
if (text.Length > 1 || text[0] < 0xf000) return false;
return true;
}
}
}
字体编辑器中显示的实际内部名称