android - 如何以编程方式将 Google Fonts .xml 设置为 TextView

标签 android xml fonts google-fonts

从 Android Studio 3.0 开始,您可以简单地将谷歌字体集成到您的项目中 (See android walkthrough) .

当您添加一些字体时,Android Studio 会为您生成字体文件夹,其中包括该字体的 XML 文件(在我的示例中为 amatic_sc.xml)。此外,Studio 在值文件夹中创建一个 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,我希望我的代码 fragment 足够了。

感谢您的帮助!

最佳答案

你可以使用支持库来兼容android 8之前的版本,像这样:

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

更多信息 here .

关于android - 如何以编程方式将 Google Fonts .xml 设置为 TextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46264615/

相关文章:

android - eclipse (安卓): When clicking 'Run' /'Debug' nothing happens

android - Bixolon sdk编码characters_android

android - 元素的内容必须包含格式正确的字符数据或标记。 AndroidManifest.xml

php - 如何设计一个基于正在运行的脚本后端的 AJAX 界面来显示进度条

html - 是否可以用 CSS 将一个字符替换为另一个字符?

html - 为什么我的 CSS 看起来与您的 CSS 不同?

android - 为什么应用程序及其资源在退出后仍保留在内存中?

java - 从 XML 文档、XSLT 和 JAXB 中删除元素

php - 使用 imagettftext() 时如何处理字体文件不支持的字符?

java - Android 2.3.3,使用 tabhost 加载布局和第二个 tabhost 不起作用