1

我在本地 xamarin andorid 工作。我面临设置自定义字体的问题。我正在使用“SkiaSharp”插件生成画布视图。该插件位于 PCL 内部,因此可以在 android 和 ios 中使用。

我的“资产”文件夹中有一个 .ttf 文件。

我使用以下代码生成字体路径。

string path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
string FontPath = System.IO.Path.Combine(path, "Myfile.ttf");

我发送给 PCL 设置“SKTypeface”的这个路径

paint.Typeface = SKTypeface.FromFile(FontPath, 0);

如果是“字体”,那么我可以使用以下方法

Typeface tf = Typeface.CreateFromAsset(Assets, "Myfile.ttf");

我总是将 null SKTypeface 作为返回值。

我认为找不到字体路径。

bool flag=File.Exist(FontPath)

它总是返回空值。

如何在 xamarin andorid 中获取 Asset 文件夹的路径?如何将自定义字体设置为 SKTypeface?

4

1 回答 1

3

您通常不使用 android 资产的路径,因为它们位于应用程序包内。相反,您会得到一个流并加载它 - 但是资产流是不可搜索的,因此必须先复制它们:

SKTypeface typeface;
using (var asset = Assets.Open("Fonts/CONSOLA.TTF"))
{
    var fontStream = new MemoryStream();
    asset.CopyTo(fontStream);
    fontStream.Flush();
    fontStream.Position = 0;
    typeface = SKTypeface.FromStream(fontStream);
}

...
paint.Typeface = typeface;

我还想说明这是相对“慢”的,所以你可能想这样做一次,然后重新使用字体。避免在绘制方法中直接加载文件,因为绘制发生在 UI 线程上并且会阻塞。

加载资产时,不要包含假定的根“资产”文件夹。

编辑

在新的 v1.59.2 版本中,现有FromStream方法将按预期工作,无论流如何。

于 2017-10-03T13:15:38.810 回答