将字体添加为 XML 资源

Android 8.0(API 级别 26)引入了 XML 中的字体,此功能允许您将字体用作资源。您可以将font文件添加到res/font/文件夹中,以将字体捆绑为资源。这些字体将在您的R文件中编译,并在 Android Studio 中自动可用。您可以使用font资源类型访问字体资源。例如,要访问字体资源,请使用@font/myfontR.font.myfont

要在运行 Android 4.1(API 级别 16)及更高版本的设备上使用 XML 中的字体功能,请使用支持库 26.0。有关使用支持库的更多信息,请参阅使用支持库部分。

要将字体添加为资源,请在 Android Studio 中执行以下步骤

  1. 右键单击res文件夹,然后转到新建 > Android 资源目录。将出现新建资源目录窗口。
  2. 资源类型列表中,选择font,然后单击确定

    注意:资源目录的名称必须为font

    Adding the font resource directory

    图 1. 添加字体资源目录。

  3. 将您的字体文件添加到font文件夹中。

    以下文件夹结构将生成R.font.dancing_scriptR.font.lobsterR.font.typo_graphica

    Adding the font files in the resource directory

    图 2.res/font目录中添加字体文件。

  4. 双击字体文件以在编辑器中预览文件中的字体。预览字体文件

    图 3. 预览字体文件。

创建字体系列

字体系列是一组字体文件以及样式和粗细详细信息。在 Android 中,您可以将新的字体系列创建为 XML 资源,并将其作为一个单元访问,而不是将每个样式和粗细作为单独的资源引用。通过这样做,您可以让系统根据您使用的文本样式选择正确的字体。

要创建字体系列,请在 Android Studio 中执行以下步骤

  1. 右键单击font文件夹,然后选择新建 > 字体资源文件。将出现新建资源文件窗口。
  2. 输入文件名,然后单击确定。新的字体资源 XML 将在编辑器中打开。
  3. 将每个字体文件、样式和粗细属性括在<font>元素中。以下 XML 演示了在字体资源 XML 中添加字体相关属性
    <?xml version="1.0" encoding="utf-8"?>
    <font-family xmlns:android="http://schemas.android.com/apk/res/android">
        <font
            android:fontStyle="normal"
            android:fontWeight="400"
            android:font="@font/lobster_regular" />
        <font
            android:fontStyle="italic"
            android:fontWeight="400"
            android:font="@font/lobster_italic" />
    </font-family>
    

在 XML 布局中使用字体

TextView对象或样式中使用您的字体(单个字体文件或来自字体系列的字体),方法是使用fontFamily属性。

注意:当您使用字体系列时,TextView会根据需要自行切换,以使用该系列中的字体文件。

将字体添加到 TextView

要为TextView设置字体,请执行以下操作之一

  • 在布局 XML 文件中,将fontFamily属性设置为要访问的字体文件。
    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:fontFamily="@font/lobster"/>
    
  • 打开属性窗口以设置TextView的字体。
    1. 选择一个视图以打开属性窗口。

      注意:属性窗口仅在设计编辑器打开时可用。选择窗口底部的设计选项卡。

    2. 展开textAppearance属性,然后从fontFamily列表中选择字体。
    3. Selecting the font from Properties

      图 4.属性窗口中选择字体。

图 5 中最右侧窗格中显示的 Android Studio 布局预览允许您预览在TextView中设置的字体。

Previewing fonts in layout preview

图 5. 在布局预览中预览字体。

将字体添加到样式

打开styles.xml文件并将fontFamily属性设置为要访问的字体文件。

  • <style name="customfontstyle" parent="@android:style/TextAppearance.Small">
        <item name="android:fontFamily">@font/lobster</item>
    </style>
    
  • 以编程方式使用字体

    要以编程方式检索字体,请调用getFont(int)方法并提供要检索的字体的资源标识符。此方法返回一个Typeface对象。尽管系统会根据字体信息为您选择最佳样式,但您可以使用setTypeface(android.graphics.Typeface, int)方法设置具有特定样式的字体。

    注意:TextView会为您执行此操作。

    Kotlin

    val typeface = resources.getFont(R.font.myfont)
    textView.typeface = typeface
    

    Java

    Typeface typeface = getResources().getFont(R.font.myfont);
    textView.setTypeface(typeface);
    

    使用支持库

    支持库 26.0 支持在运行 Android 4.1(API 级别 16)及更高版本的设备上使用 XML 中的字体。

    注意:当您通过支持库在 XML 布局中声明字体系列时,请使用app命名空间以确保字体加载。

    <?xml version="1.0" encoding="utf-8"?>
    <font-family xmlns:app="http://schemas.android.com/apk/res-auto">
        <font app:fontStyle="normal" app:fontWeight="400" app:font="@font/myfont-Regular"/>
        <font app:fontStyle="italic" app:fontWeight="400" app:font="@font/myfont-Italic" />
    </font-family>
    

    要以编程方式检索字体,请调用ResourceCompat.getFont(Context, int)方法并提供Context的实例和资源标识符。

    Kotlin

    val typeface = ResourcesCompat.getFont(context, R.font.myfont)
    

    Java

    Typeface typeface = ResourcesCompat.getFont(context, R.font.myfont);