我在原生的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)
它总是返回null值。
如何在xamarin andorid中获取Asset文件夹的路径? 如何将自定义字体设置为SKTypeface?
答案 0 :(得分: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;
我还要注意这是相对“慢”的,所以你可能想要这样做一次,然后重新使用字体。避免直接在paint方法中加载文件,因为绘制在UI线程上发生并将阻止。
加载资源时,请不要包含根“Assets”文件夹,因为这是假设的。
修改强>
在新的v1.59.2版本中,现有的FromStream
方法将按预期工作,无论流如何。