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

时间:2017-03-02 11:59:08

标签: xamarin xamarin.forms prism

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

我们已关注the most recent documentation(即不使用自定义渲染),似乎已将其缩小为与棱镜有关...

为了简化问题,我们制作了一个新的Forms App,将Xamarin demo中的Lobster-Regular.ttf添加到Android资源和iOS资源,并确保其属性分别为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将只使用标准字体。

有一个known issue with custom fonts in UWP and WP apps,但这似乎并不相关。

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

这个问题使我发疯,因为无论我尝试什么,字体都会显示在我的UWP应用程序中,而不显示在我的Android应用程序中。

但是我找到了解决方案。如此愚蠢,如果字体文件本身被命名为“ MyFont.TTF”而不是“ MyFont.ttf”(请注意文件扩展名大小写的不同),则Android应用程序中不会发生任何错误,但字体不会露面。当我将文件扩展名的大小写更改为小写,重新构建并重新部署时,就像魔术一样,字体出现了!

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