无特定TargetType的应用中多自定义字体导入配置问题
解决Xamarin.Forms自定义字体加载问题
看起来你在Xamarin.Forms里加载自定义字体的时候卡壳了,我来帮你梳理下常见问题和正确的配置方式——毕竟字体加载这事儿细节坑还挺多的:
1. 先确认字体文件的属性配置
这是最容易忽略的基础步骤,必须先搞定:
- Android端:在Visual Studio里选中
.Droid/Assets下的字体文件,右键设置生成操作为AndroidAsset,同时把复制到输出目录设为「如果较新则复制」。如果生成操作不对,字体根本不会被打包进APK里。 - iOS端:选中
.iOS/Resources下的字体文件,设置生成操作为BundleResource,复制选项同样设为「如果较新则复制」。另外你提到已经配置了Info.plist,一定要确保里面的字体文件名和实际文件完全一致(包括大小写!iOS对这个很敏感),示例配置如下:<key>UIAppFonts</key> <array> <string>YourCustomBold.ttf</string> <string>YourCustomRegular.ttf</string> </array>
2. 修正App.xaml中的字体引用代码
你的代码片段被截断了,先给你补全正确的跨平台写法,同时指出几个关键坑点:
<Application.Resources> <ResourceDictionary> <!-- 注意这里要用x:Key而不是x:Name,这样才能在页面中引用样式 --> <Style x:Key="BoldFont" TargetType="Label"> <Setter Property="FontFamily"> <Setter.Value> <OnPlatform x:TypeArguments="x:String"> <!-- Android格式:[字体文件名].ttf#[字体内部名称] --> <On Platform="Android" Value="MyCustomBold.ttf#My Custom Bold"/> <!-- iOS直接用字体的内部名称,不需要加文件名 --> <On Platform="iOS" Value="My Custom Bold"/> <!-- 如果有UWP的话,格式类似Android --> <On Platform="UWP" Value="Assets/MyCustomBold.ttf#My Custom Bold"/> </OnPlatform> </Setter.Value> </Setter> </Style> </ResourceDictionary> </Application.Resources>
这里最容易踩的坑是字体内部名称≠文件名:
- 你可以在Windows上双击字体文件,打开字体查看器,标题栏显示的名称就是字体的内部名称(比如文件名是
CustomBold-v2.ttf,内部名称可能是Custom Bold) - Android和UWP都需要指定
文件名#内部名称,而iOS只需要内部名称
3. 最后几步排查动作
如果配置完还是没效果,试试这些操作:
- 清理整个解决方案,然后重新生成所有项目(缓存问题经常导致字体不加载)
- 在页面中正确引用样式:
<Label Text="测试粗体字体" Style="{StaticResource BoldFont}" /> - 检查字体文件是否损坏:换个字体文件测试下,排除文件本身的问题
内容的提问来源于stack exchange,提问作者Jeppe Christensen
相关产品推荐
相关产品推荐

