使用 Xamarin Forms 和 Prism 在 Android 上不显示自定义字体

Custom font not displaying on Android with Xamarin Forms and Prism

使用 Xamarin Forms (2.3.1) 和 Prism (6.2) 为 iOS 和 Android 开发应用程序时,我们很难让自定义字体在 Android 上运行,但是iOS一直很好。

我们已遵循 the most recent documentation(即不使用自定义渲染)并且似乎已将其缩小到与 Prism 相关...

为了简化问题,我们制作了一个新的 Forms 应用程序,将 Lobster-Regular.ttf 从 Xamarin demo 添加到 Android Assets 和 iOS Resources 并确保其 属性分别是AndroidAsset和BundleResource,然后在默认的xaml页面添加:

    <Label Text="Hello Forms with XAML">
        <Label.FontFamily>
            <OnPlatform x:TypeArguments="x:String">
                <OnPlatform.iOS>MarkerFelt-Thin</OnPlatform.iOS>
                <OnPlatform.Android>Lobster-Regular.ttf#Lobster-Regular</OnPlatform.Android>
                <OnPlatform.WinPhone></OnPlatform.WinPhone>
            </OnPlatform>
        </Label.FontFamily>
    </Label> 

(这也是直接来自演示)

它适用于 iOS 和 Android。

如果我们创建一个新的 Prism Unity 应用程序,添加字体文件,检查属性(默认正确)并在 MainPage.xaml 中插入标签 iOS 将使用自定义字体,但 Android 将只使用标准字体。

有一个 但这似乎不相关。

所有测试均在 iOS 模拟器和 Android 模拟器上进行。

更新 根据 Dan S. 的评论,我已经上传了一个项目来展示一个最小的棱镜应用程序,该应用程序具有适用于 iOS 但不适用于 Android 的自定义字体:sample project

根据您提供的解决方案,问题似乎与您在项目中使用的 Xamarin Forms 版本有关。您的示例使用 X.F 2.3.1.114,Xamarin 中的示例使用 2.3.3.180。至少更新到 2.3.3.180 可以解决示例中的问题。更新到 Prism 6.3.0-pre2 也有效(但只是因为它将 Xamarin Forms 更新到最新版本)。

这个问题让我抓狂,因为无论我尝试什么,字体都会出现在我的 UWP 应用程序中,但不会出现在我的 Android 应用程序中。

不过我找到了解决方案。如此愚蠢,如果字体文件本身被命名为 "MyFont.TTF" 而不是 "MyFont.ttf"(注意文件扩展名大小写的差异),Android 应用程序不会出现错误,但是字体没有显示。当我将文件扩展名的大小写更改为小写、重建并重新部署时,就像变魔术一样,字体出现了!

希望其他人阅读这篇文章 post 并帮助他们克服这个愚蠢的障碍...