5

由于使用 Android Studio 3.0,您可以简单地将 google 字体集成到您的项目中(参见 android walkthrough)

当您添加一些字体时,Android Studio 会为您生成字体文件夹,包括字体的 XML 文件(在我的例子中是 amatic_sc.xml)。Studio 还在 value 文件夹中创建了一个 preloaded_fonts.xml。

amatic_sc.xml:

<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:app="http://schemas.android.com/apk/res-auto"
        app:fontProviderAuthority="com.google.android.gms.fonts"
        app:fontProviderPackage="com.google.android.gms"
        app:fontProviderQuery="Amatic SC"
        app:fontProviderCerts="@array/com_google_android_gms_fonts_certs">
</font-family>

preloaded_fonts.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <array name="preloaded_fonts" translatable="false">
        <item>@font/amatic_sc</item>
    </array>
</resources>

当我将以下行静态包含到我的 xml 文件中时,它可以正常工作:

android:fontFamily="@font/amatic_sc"

但在我的情况下,我需要在我的自定义 listAdapter 中以编程方式设置字体系列。我尝试了以下代码示例,但没有任何效果:

// Display text with default fontFamily
viewHolder.textView.setTypeface(Typeface.create("@font/amatic_sc", Typeface.NORMAL));

// both throws java.lang.RuntimeException: Font asset not found [../res/]font/amatic_sc.xml
viewHolder.textView.setTypeface(Typeface.createFromAsset(context.getAssets(), "font/amatic_sc.xml"));
viewHolder.textView.setTypeface(Typeface.createFromAsset(context.getAssets(), "../res/font/amatic_sc.xml"));

// both throws java.lang.RuntimeException: Font asset not found [../res/]font/amatic_sc.xml
viewHolder.textView.setTypeface(Typeface.createFromFile("font/amatic_sc.xml"));
viewHolder.textView.setTypeface(Typeface.createFromFile("../res/font/amatic_sc.xml"));

就我而言,我使用最小SDK 版本 16,我希望我的代码片段就足够了。

谢谢您的帮助!

4

2 回答 2

19

您可以使用支持库来兼容 8 之前的 android 版本,如下所示:

Typeface typeface = ResourcesCompat.getFont(context,R.font.amatic_sc);
viewHolder.textView.setTypeface(typeface);

更多信息在这里

于 2017-09-17T14:03:47.117 回答
0

将字体文件保存在资产文件夹中,然后使用此片段

Typeface font = Typeface.createFromAsset(mContext.getAssets(), fontPath);
v.setTypeface(font);

注意:字体路径应该是

Roboto-Bold.ttf

于 2017-09-17T13:37:13.400 回答