在skiasharp中加载字体

时间:2018-05-23 18:07:23

标签: xamarin xamarin.forms xamarin.ios xamarin.android skiasharp

如何在Xamarin表单的skiasharp中使用自定义字体。

我试过

paint.Typeface = SKTypeface.FromFamilyName("CoText_Bd"); 

paint.Typeface = SKTypeface.FromFile("CoText_Bd");

但两者都没有成功。 我是否需要使用依赖服务访问字体的路径?

2 个答案:

答案 0 :(得分:4)

如果你想要多平台多平台解决方案,将所有SkiaSharp / PaintCode绘图代码放入.NET标准库,包括作为嵌入资源的字体(不要忘记将构建操作设置为嵌入式资源!)。然后,您可以使用此方法(Library ClassLibrary1,Folder Font)获取SKTypeface对象:

    public static SKTypeface GetTypeface(string fullFontName)
    {
        SKTypeface result;

        var assembly = Assembly.GetExecutingAssembly();
        var stream = assembly.GetManifestResourceStream("ClassLibrary1.Font." + fullFontName);
        if (stream == null)
            return null;

        result = SKTypeface.FromStream(stream);
        return result;
    }

记得在不再需要SKObjects时处理它们。

为了优化性能,最好在Dictionary中缓存SKTypeface对象以优化速度。

当您将所有绘图代码放入.NET标准库时,您可以轻松地在Windows桌面WPF项目中进行测试/开发,当所有内容编译速度非常快且准备就绪时,可以在移动应用程序中使用它。

答案 1 :(得分:1)

我们应该在info.plist for iOS中添加UIAppFonts

<key>UIAppFonts</key>
<array>
    <string>CoText_Bd.otf</string>
</array>

对于Android试用

CoText_Bd.otf#CoText_Bd