Android 8.0(API 级别 26)引入了 XML 中的字体,此功能允许您将字体用作资源。您可以将font
文件添加到res/font/
文件夹中,以将字体捆绑为资源。这些字体将在您的R
文件中编译,并在 Android Studio 中自动可用。您可以使用font
资源类型访问字体资源。例如,要访问字体资源,请使用@font/myfont
或R.font.myfont
。
要在运行 Android 4.1(API 级别 16)及更高版本的设备上使用 XML 中的字体功能,请使用支持库 26.0。有关使用支持库的更多信息,请参阅使用支持库部分。
要将字体添加为资源,请在 Android Studio 中执行以下步骤
- 右键单击res文件夹,然后转到新建 > Android 资源目录。将出现新建资源目录窗口。
- 在资源类型列表中,选择font,然后单击确定。
注意:资源目录的名称必须为font。
- 将您的字体文件添加到
font
文件夹中。以下文件夹结构将生成
R.font.dancing_script
、R.font.lobster
和R.font.typo_graphica
。 - 双击字体文件以在编辑器中预览文件中的字体。
创建字体系列
字体系列是一组字体文件以及样式和粗细详细信息。在 Android 中,您可以将新的字体系列创建为 XML 资源,并将其作为一个单元访问,而不是将每个样式和粗细作为单独的资源引用。通过这样做,您可以让系统根据您使用的文本样式选择正确的字体。
要创建字体系列,请在 Android Studio 中执行以下步骤
- 右键单击
font
文件夹,然后选择新建 > 字体资源文件。将出现新建资源文件窗口。 - 输入文件名,然后单击确定。新的字体资源 XML 将在编辑器中打开。
- 将每个字体文件、样式和粗细属性括在
<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
的字体。- 选择一个视图以打开属性窗口。
注意:属性窗口仅在设计编辑器打开时可用。选择窗口底部的设计选项卡。
- 展开textAppearance属性,然后从fontFamily列表中选择字体。
- 选择一个视图以打开属性窗口。
图 5 中最右侧窗格中显示的 Android Studio 布局预览允许您预览在TextView
中设置的字体。
将字体添加到样式
打开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);