Xamarin Android设计器页面(main.axml)中找不到字体资产异常

时间:2019-06-04 06:28:55

标签: xamarin.android

  1. 使用Assets文件夹中的ttf文件时,Designer崩溃。
  2. 在我的代码中,我使用ttf文件设置了TextView Typeface属性(例如Typeface = Typeface.CreateFromAsset(this.Context.Assets,“ fonts / Sample_Icons.ttf”),
  3. 它使我的设计器页面崩溃了。

请给我建议。

2 个答案:

答案 0 :(得分:1)

将ttf文件放在Assets文件夹中时,可以通过以下方法访问ttf文件:

 AssetManager assets = this.Assets;
 Typeface font = Typeface.CreateFromAsset(assets, "Lobster-Regular.ttf");

 // and use like this
 Button button = (Button)FindViewById(Resource.Id.btn);
 button.SetTypeface(font, TypefaceStyle.Normal);

换句话说,您只需要删除ttf文件之前的fonts,就可以这样使用:

Typeface.CreateFromAsset(this.Assets, "Sample_Icons.ttf");

而不是:

Typeface.CreateFromAsset(this.Context.Assets, "fonts/Sample_Icons.ttf");

有一个简单的演示,您可以检查它here。效果如下: enter image description here

答案 1 :(得分:0)

我根据这篇文章使用了解决方案:

https://blog.mzikmund.com/2017/07/checking-for-design-mode-in-xamarin-forms/

public static class EmulatorHelper
{
    // https://blog.mzikmund.com/2017/07/checking-for-design-mode-in-xamarin-forms/
    public static bool IsDesigner { get; set; }
    #if !RELEASE
        = true;
    #endif
}

然后在应用程序的某处开始,例如AndroidApp.cs

public class AndroidApp : App
{
    public override void Initialize()
    {
        base.Initialize();
        EmulatorHelper.IsDesigner = false;
    }
}

最后替换

Typeface font = Typeface.CreateFromAsset(assets, "Lobster-Regular.ttf");

使用

Typeface font = !EmulatorHelper.IsDesigner 
    ? Typeface.CreateFromAsset(assets, "Lobster-Regular.ttf")
    : Typeface.Default;

此解决方案的缺点是您会在设计器中看到默认字体,但它比带有错误标签的橙色框要好得多:)