从 Android 8.0(API 级别 26)和 Android 支持库 26 开始,可以支持 API 从提供程序应用请求获取字体,而不是将文件绑定到应用或让应用下载字体。该功能可通过支持库 26 在搭载 Android API 版本 14 及更高版本的设备上使用。

可下载字体功能具有以下优势:

缩减应用大小,进而提高应用安装成功率 提升系统的整体运行状况,因为多个应用可通过提供程序共用同一字体。这样可以帮用户节省移动数据网络流量、手机内存和磁盘空间。在此模型中,系统会在需要时通过网络提取字体。

请参阅以下相关资源:

可下载字体示例应用 Java | Kotlin 可下载字体的工作方式是怎样的?

字体提供程序是一个应用,可检索字体并将其缓存在本地,以便其他应用可以请求获取和共用字体。图 1 说明了该流程。

图 1. 可下载字体的使用流程 基础知识

您可以通过以下方式使用可下载字体功能:

通过 Android Studio 和 Google Play 服务 以程序化方式 通过支持库 注意:本页介绍了如何在基于 View 的界面中使用可下载字体。如果您使用的是 Jetpack Compose,请参阅 Compose 中的可下载字体文档。 通过 Android Studio 和 Google Play 服务使用可下载字体

您可以将应用设置为使用 Android Studio 3.0 或更高版本来下载字体。 为帮助您开始使用可下载字体功能,您可以使用 Google Play 服务提供的字体提供程序。

注意:设备必须安装 Google Play 服务版本 11 或更高版本才能使用 Google Fonts 提供程序。

在 Layout Editor 中,选择一个 TextView,然后在 Properties 下,选择 fontFamily > More Fonts。 图 2. 使用布局编辑器

此时将显示 Resources 窗口。

在 Source 下拉列表中,选择 Google Fonts。 在 Fonts 框中,选择一种字体。 选择 Create downloadable font,然后点击 OK。

注意:要在您的应用中捆绑字体,请选择 Add font to project。

图 3. 从“Resources”窗口选择字体

Android Studio 会自动生成在您的应用中正确呈现字体所需的相关 XML 文件。

图 4. 预览字体文件 以程序化方式使用可下载字体

在 Android 8.0(API 级别 26)之前,支持库 26.0 已全面支持可下载字体。如需详细了解如何使用支持库,请转到“可下载字体支持库”部分。

如需以程序化方式使用可下载字体功能,您需要与以下两个关键类互动:

android.graphics.fonts.FontRequest:此类让您可以创建字体请求。 FontsContract:此类让您可以根据字体请求创建新的 Typeface 对象。

您的应用会使用 FontsContract API 从字体提供程序检索字体。每个提供程序对其支持的 Android 版本和查询语言都有自己的一组限制。如需详细了解 Android 版本和查询格式,请参阅提供程序的相关文档。

要下载字体,请执行以下步骤:

创建 android.graphics.fonts.FontRequest 类的实例,以从提供程序请求获取字体。要创建请求,请传递以下参数: 字体提供程序的授权 用于验证提供程序身份的字体提供程序软件包 字体的字符串查询。如需详细了解查询格式,请参阅字体提供程序的相关文档,例如 Google Fonts。 用于验证提供程序身份的一系列证书哈希集。

注意:如果您从预安装的提供程序请求获取字体,则无需添加证书。但是,如果您通过支持库请求获取字体,则必须始终提供证书。

Kotlinval request = FontRequest( "com.example.fontprovider.authority", "com.example.fontprovider", "my font", certs)JavaFontRequest request = new FontRequest("com.example.fontprovider", "com.example.fontprovider", "my font", certs);

注意:您可以从字体提供程序接收参数值。Android Studio 会自动在其界面中为支持的提供程序填充这些值。

创建 FontsContract.FontRequestCallback 类的实例。 替换 onTypefaceRetrieved() 方法,以指示字体请求已完成。将检索到的字体作为参数提供。您可以根据需要使用此方法来设置字体。 例如,您可以对 TextView 设置字体。 替换 onTypefaceRequestFailed() 方法,以接收有关字体请求过程中的错误的信息。 如需详细了解错误代码,请参阅 error code constants。 调用 FontsContract.requestFont() 方法,以从字体提供程序检索字体。该方法会启动检查,以确定缓存中是否存在该字体。如果本地无该字体,则该方法会调用字体提供程序,异步检索字体并将结果传递给回调。传递以下参数: Context 类的实例 android.graphics.fonts.FontRequest 类的实例 用于接收字体请求结果的回调 用于提取线程上的字体的处理程序

注意:确保此处理程序不是用户界面线程处理程序。

以下示例代码说明了整个可下载字体的使用流程:

Kotlinval request = FontRequest( "com.example.fontprovider.authority", "com.example.fontprovider", "my font", certs)val callback = object : FontsContract.FontRequestCallback() { override fun onTypefaceRetrieved(typeface: Typeface) { // Your code to use the font goes here ... } override fun onTypefaceRequestFailed(reason: Int) { // Your code to deal with the failure goes here ... }}FontsContract.requestFonts(context, request, handler, null, callback)JavaFontRequest request = new FontRequest("com.example.fontprovider.authority", "com.example.fontprovider", "my font", certs);FontsContract.FontRequestCallback callback = new FontsContract.FontRequestCallback() { @Override public void onTypefaceRetrieved(Typeface typeface) { // Your code to use the font goes here ... } @Override public void onTypefaceRequestFailed(int reason) { // Your code to deal with the failure goes here ... }};FontsContract.requestFonts(context, request, handler, null, callback);

如需详细了解如何从字体提供程序下载字体,请参阅可下载字体示例应用 Java | Kotlin。

通过支持库使用可下载字体

支持库 26 支持在搭载 Android API 版本 14 或更高版本的设备上使用可下载字体功能。android.support.v4.provider 软件包中包含 FontsContractCompat 和 FontRequest 类,可实现向后兼容的可下载字体功能支持。支持库类包含多种类似于框架的方法。下载字体的过程也与下载字体部分所述的过程类似。

要使用支持库下载字体,请从 android.support.v4.provider 软件包中导入 FontsContractCompat 和 FontRequest 类。创建这些类(而不是 FontsContract 和 android.graphics.fonts.FontRequest 框架类)的实例。

注意:通过支持库请求获取字体时,您必须提供证书。即便是从预安装的提供程序请求获取字体,也是如此。

添加支持库依赖项

要使用 FontsContractCompat 和 FontRequest 类,您必须在开发环境中修改应用项目的类路径依赖项。

如需将支持库添加到应用项目中,请执行以下操作:

打开应用的 build.gradle 文件。 将支持库添加到 dependencies 部分。 Groovydependencies { ... implementation "com.android.support:support-compat:28.0.0"}Kotlindependencies { ... implementation("com.android.support:support-compat:28.0.0")} 将可下载字体用作 XML 中的资源

Android 8.0(API 级别 26)和支持库 26 可通过一种更快、更便捷的方式将自定义字体


比丘资源网 » 可下载字体  

发表回复

提供最优质的资源集合

立即查看 了解详情