【发布时间】:2020-12-21 19:43:41
【问题描述】:
我正在尝试修改默认的 Xamarin Forms (Flyout) 应用程序模板,以将 Material Design 图标用于 FlyoutItem 图标,而不是提供的 .png 文件。我曾尝试关注this blog post by James Montemagno,并尝试使用他的Hanselman.Forms 项目作为参考......但我错过了一些东西。
注意: 此时,我无法使用 iPhone 或 Mac,所以我只专注于 Android 项目。
我做了以下步骤:
- 将
materialdesignicons-webfont.ttf文件导入Assets 文件夹,并仔细检查其Build Action是否设置为AndroidAsset。 - 在
App.xaml文件中添加了以下内容:
<OnPlatform x:Key="MaterialFontFamily" x:TypeArguments="x:String">
<On Platform="Android" Value="materialdesignicons-webfont.ttf#Material Design Icons" />
</OnPlatform>
<x:String x:Key="IconAbout"></x:String>
- 修改 AppShell.xaml 以更改图标:
<FlyoutItem Title="About">
<FlyoutItem.Icon>
<FontImageSource Glyph="{StaticResource IconAbout}"
FontFamily="{StaticResource MaterialFontFamily}"
Color="Black"/>
</FlyoutItem.Icon>
<ShellContent Route="AboutPage" ContentTemplate="{DataTemplate local:AboutPage}" />
</FlyoutItem>
这是 Hanselman.Forms 项目的 TabItem 的直接副本 - 我认为 FontFamily 必须是 DynamicResource,但显然不是,因为它在该项目中按原样工作,但在我的任何一种方式下都不起作用 - 图标始终为空白(实际上,如果我将 Glyph 更改为字母 A 我会得到一个图标的“A”,但这并没有真正的帮助)。
我错过了一些我看不到的愚蠢的小细节。
【问题讨论】:
-
那个James的博客是老版本,看这个Embedded Fonts,很容易实现。
-
并贴上标签来测试你的字体设置。
-
正如我在下面对@Tommy99 所说的那样——这是一个很好的替代方案,但我的目标是了解我所忽略的内容——我的理解存在差距,不同的实现无法填补。一旦我得到这个工作,我肯定会重构这种方法!
-
好的。让我们从
<Label Text="&#xf2fd;" FontFamily="{StaticResource MaterialFontFamily}">开始,那么标签显示OK了吗? -
@Shaw - 不;它没有。尝试实施您的替代方案导致我的字形代码错误(请参阅我发布的答案)。谢谢。
标签: android xamarin xamarin.forms app.xaml