如何从asset文件夹中获取字体文件的路径,以及如何在xamarin android中使用该路径设置SKTypeface?

如何从asset文件夹中获取字体文件的路径,以及如何在xamarin android中使用该路径设置SKTypeface?,android,xamarin,xamarin.forms,xamarin.android,skiasharp,Android,Xamarin,Xamarin.forms,Xamarin.android,Skiasharp,我在土生土长的安道尔工作。我面临设置自定义字体的问题。我正在使用“SkiaSharp”插件生成画布视图。该插件位于PCL内部,因此可以在android和ios中使用 我的“资产”文件夹中有一个.ttf文件。 我使用以下代码生成字体路径 string path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); string FontPath = System.IO.Path.Combine(

我在土生土长的安道尔工作。我面临设置自定义字体的问题。我正在使用“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”

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

Typeface tf = Typeface.CreateFromAsset(Assets, "Myfile.ttf");
我总是得到null SKTypeface作为返回值。

我想找不到字体路径。

bool flag=File.Exist(FontPath)
它总是返回空值

如何获取xamarin和ID中资产文件夹的路径?
如何将自定义字体设置为SKTypeface?

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

sk字体;
使用(var asset=Assets.Open(“font/CONSOLA.TTF”))
{
var fontStream=new MemoryStream();
资产.CopyTo(fontStream);
fontStream.Flush();
fontStream.Position=0;
typeface=SKTypeface.FromStream(fontStream);
}
...
油漆.字体=字体;
我还想指出,这是相对“慢”,所以你可能想这样做一次,然后只是重复使用字体。避免直接在绘制方法中加载文件,因为绘制发生在UI线程上,并且会阻塞

加载资产时,不要包括根“资产”文件夹,因为这是假定的

编辑


在新的v1.59.2版本中,现有的
FromStream
方法将按预期工作,而不考虑流。

paint.Typeface=SKTypeface.FromFamilyName(“Arial”);它的工作,但自定义字体不工作的银行的答复,但不工作。我得到了空流。我的字体文件在字体文件夹中。资产/Font/myfile。ttf@RutulMehta我重新写了答案,因为我第一次错了。这不是一段很好的代码,我将在下一版本的SkiaSharp中修复它。我得到了字体,但FontFamily无法设置。我不确定你到底在问什么。。。不能设置字体的族,字体就是族。要加载特定族,请使用
FromFamilyName
bool flag=File.Exist(FontPath)