我正在 native xamarin andorid 中工作。我面临设置自定义字体的问题。我正在使用“SkiaSharp”插件来生成 Canvas View 。该插件位于 PCL 内部,因此可以在 android 和 ios 中使用。
我的“Assets”文件夹中有一个 .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”那么我可以使用以下方法
Typeface tf = Typeface.CreateFromAsset(Assets, "Myfile.ttf");
我总是得到 null SKTypeface 作为返回值。
我认为找不到字体路径。
bool flag=File.Exist(FontPath)
它总是返回空值。
如何在xamarin andorid中获取Asset文件夹的路径? 如何将自定义字体设置为SKTypeface?
最佳答案
您通常不会使用 Android 资源的路径,因为它们位于应用程序包内。相反,您获取一个流并加载它 - 但是 Assets 流不可查找,因此必须首先复制它们:
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 线程上并且会阻塞。
加载资源时,不要包含根“Assets”文件夹,因为这是假定的。
编辑
在新的 v1.59.2 版本中,无论流如何,现有的 FromStream
方法都将按预期工作。
关于android - 如何从资源文件夹获取字体文件的路径以及如何使用该路径在xamarin android中设置SKTypeface?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46538300/