Xamarin Android:字体未被拾取

时间:2018-04-13 09:05:04

标签: xamarin.android

我正在尝试将Google的Quicksand字体(https://fonts.google.com/?query=quicksand)应用到我的Xamarin Android应用中。

我已将quicksand_bold.ttfquicksand_light.ttfquicksand_medium.ttfquicksand_regular.ttf添加到Resources\font文件夹,其构建类型为AndroidResource。

我还在同一个文件夹中添加了一个名为quicksand.xml的文件。这包含文本

<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto">
  <font-family xmlns:android="http://schemas.android.com/apk/res/android"
             xmlns:app="http://schemas.android.com/apk/res-auto">
    <font android:font="@font/quicksand_regular"
          android:fontStyle="normal"
          android:fontWeight="400"
          app:font="@font/quicksand_regular"
          app:fontStyle="normal"
          app:fontWeight="400" />
    <font android:font="@font/quicksand_bold"
          android:fontStyle="normal"
          android:fontWeight="700"
          app:font="@font/quicksand_bold"
          app:fontStyle="normal"
          app:fontWeight="700" />
    <font android:font="@font/quicksand_medium"
          android:fontStyle="normal"
          android:fontWeight="500"
          app:font="@font/quicksand_medium"
          app:fontStyle="normal"
          app:fontWeight="500" />
    <font android:font="@font/quicksand_light"
          android:fontStyle="normal"
          android:fontWeight="300"
          app:font="@font/quicksand_light"
          app:fontStyle="normal"
          app:fontWeight="300" />
  </font-family>
</font-family>

最后我将主题Theme="@style/MyTheme"应用于我的主要活动:

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <style name="MyTheme" parent="@android:style/Theme.Holo">
    <item name="android:fontFamily">@font/quicksand</item>
  </style>
</resources>

我一直在关注https://docs.microsoft.com/en-us/xamarin/android/app-fundamentals/resources-in-android/fonts的说明。我假设@font/quicksand元素将系统定向到quicksand.xml文件。

我原本以为这些步骤足以让字体作为默认样式的一部分被拾取,但这种情况不会发生。

我错过了一步吗?

1 个答案:

答案 0 :(得分:1)

在Android中使用自定义字体可能会非常棘手,它可能会导致大量使用RAM。

向您的应用添加自定义字体的最简单方法之一是使用Calligraphy-xamarin,即Calligraphy的Xamarin绑定。

以下是快速教程:

首先Install-Package CallygraphyXamarin,然后将以下内容添加到您的活动

protected override void AttachBaseContext(Context newBase)
{
    base.AttachBaseContext(CalligraphyContextWrapper.Wrap(newBase));
}

最后使用自定义字体:

<TextView
    fontPath="fonts/myfont.ttf"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello world!" />

如果您要为应用设置默认字体,请在项目中添加(例如)MyApplication.cs,其中包含以下内容:

[Application]
public class MyApplication : Application
{
    /// <inheritdoc />
    public MyApplication(IntPtr javaReference, JniHandleOwnership transfer)
        : base(javaReference, transfer)
    {
    }

    /// <inheritdoc />
    public override void OnCreate()
    {
        base.OnCreate();
        CalligraphyConfig.InitDefault(
            new CalligraphyConfig.Builder()               
            .SetDefaultFontPath("fonts/myfont.ttf")
            .SetFontAttrId(Resource.Attribute.fontPath)
            .Build()
         );
    }
}