继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Android Oreo 可下载字体

一只名叫tom的猫
关注TA
已关注
手记 346
粉丝 62
获赞 329

5b9121f50001775006400434.jpg

Android 8.0(API 级别 26)和 Android Support Library 26,现在允许 API 从一个字体供应程序里请求字体,而不需要绑定字体文件到 APK,或者由 APK 自行下载字体。该功能可通过 Android Support Library 26 运行在 Android API 14 及其更高的版本。


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

  • 减少 APK 的大小

  • 提高了应用程序的安装成功率

  • 提高了整个系统的健康性,多个 APK 可以通过 provider 共享相同的字体。这样可以节省用户的手机手机数据流量、内存和存储空间。在这种模式下,需要字体的时候是通过网络获取的。



可下载字体是如何工作

字体提供程序是一个应用程序,可以获取字体并将其缓存到本地,以便其他应用程序可以请求和共享字体。

5b9121f60001e48106670534.jpg

 可下载字体处理



基础

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

  • 通过 Android Studio 和 Google Play 服务

  • 编程

  • 通过使用支持库下载



通过 Android Studio 和 Google Play 服务使用可下载字体

您可以使用 Android Studio 3.0 设置应用程序下载字体。为了帮助您开始使用可下载字体功能,您可以使用 Google Play 服务中的字体提供程序。

*注意:设备必须具有 11 或更高版本的 Google Play 服务才能使用 Google 字体提供程序。


  1. 在布局编辑器中,选择一个 TextView,然后在 Properties 下,选择 fontFamily > More Fonts    

    5b9121f600012b3406400368.jpg

      使用布局编辑器


  2. 在源代码下拉列表中,选择 Google 字体

  3. 在 “字体” 框中,选择一种字体

  4. 选择创建可下载字体,然后单击确定

*注意:要在应用程序中捆绑字体,请选择添加字体到工程

5b9121f70001168f06400418.jpg

  从资源窗口中选择字体


Android Studio 会自动生成在应用程序中正确显示字体所需的相关 XML 文件。

5b9121f70001494806400132.jpg

  预览字体文件



以编程方式使用可下载字体

要以编程方式使用可下载字体功能,您需要与两个关键类进行交互:

  • android.graphics.fonts.FontRequest: 这个类允许您创建一个字体请求

  • FontsContract:这个类允许您根据字体请求创建一个新的 Typeface 对象


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

创建一个 android.graphics.fonts.FontRequest 类的实例来请求提供者的字体。要创建请求,请传递以下参数:

  • 字体提供者权限

  • 字体提供程序包,以验证提供程序的身份

  • 用于查询字体的字符串

  • 用于验证提供商身份的证书的散列集合的列表。

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


FontRequest request = new FontRequest("com.example.fontprovider",
                 "com.example.fontprovider", "my font", certs;


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


创建一个 FontsContract.FontRequestCallback 类的实例

覆盖 onTypefaceRetrieved ( ) 方法以指示字体请求完成。提供获取的字体作为参数。您可以根据需要使用此方法设置字体。例如,您可以在 TextView 上设置字体

覆盖 onTypefaceRequestFailed ( ) 方法来接收有关字体请求过程中的错误的信息。

调用 FontsContract.requestFont ( ) 方法从字体提供程序中获取字体。该方法启动检查以确定字体是否存在于缓存中。如果字体在本地不可用,它会调用字体提供程序,异步获取字体,并将结果回调。传递以下参数:

  • Context 类的一个实例

  • android.graphics.fonts.FontRequest 类的一个实例

  • 一个回调接收字体请求的结果

  • 一个 handler 来获取线程上的字体

* 注意:确保此 Handler 不在 UI 线程中处理。


FontRequest 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, callback , handler);



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

添加支持库依赖关系要使用 FontsContractCompat 和 FontRequest 类,必须在开发环境中修改应用程序项目的类路径依赖关系。

  1. 打开您的应用程序的 build.gradle 文件。

  2. 将支持库添加到依赖关系部分。


dependencies {
  ...
  compile "com.android.support:support-compat:26.0.1"
}


*注意:当您通过支持库请求字体时,您必须提供证书。即使对于预先安装的字体提供者也是如此。



使用可下载字体作为 XML 中的资源

  1. 在 res / font 文件夹中创建一个新的 XML 文件

  2. 添加 <font-family> 根元素,并设置与以下示例 XML 文件所示的字体相关属性:

    <?xml version="1.0" encoding="utf-8"?>
    <font-family xmlns:android="http://schemas.android.com/apk/res/android"
          android:fontProviderAuthority="com.example.fontprovider.authority"
          android:fontProviderPackage="com.example.fontprovider"
          android:fontProviderQuery="example font"
          android:fontProviderCerts="@array/certs">
    </font-family>
  3. 请参阅布局 XML 文件中的 @ font / font_file_name 文件。您也可以使用 getFont ( ) 方法以编程方式获取文件。例如,getFont(R.font.font_file_name)



在清单中预先声明字体

要在清单中预先声明字体,请执行以下步骤

  1. 在 res / values / arrays.xml 中创建一个资源数组,并声明要预取的可下载字体。

    res/values/arrays.xml
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
      <array name="preloaded_fonts">
          <item>@font/font1</item>
          <item>@font/font2</item>
      </array>
    </resources>
  2. 使用 meta-data 标签在清单中声明资源数组。

    <meta-data android:name="preloaded_fonts" 
    android:resource="@array/preloaded_fonts" />



添加证书

当字体提供程序未预先安装或使用支持库时,必须声明字体提供程序签名的证书。系统使用证书来验证字体提供者的身份。


执行以下步骤添加证书:

创建具有证书详细信息的字符串数组。有关证书的详细信息请查阅字体提供程序的具体文档。


<?xml version="1.0" encoding="utf-8"?>
<resources>
  <string-array name="certs">
     <item>MIIEqDCCA5CgAwIBAgIJA071MA0GCSqGSIb3DQEBBAUAMIGUMQsww...</item>
  </string-array>
</resources>


将 fontProviderCerts 属性设置到数组上


android:fontProviderCerts="@array/certs"


以上就是可下载字体的主要内容。如果您有其他问题,欢迎通过留言板向我们提出。 如果您觉得本篇文章对身边的人有帮助,就动手转发吧。让更多的开发者关注到 Android Oreo 的相关内容,从而让我们更好地服务。

原文链接:http://www.apkbus.com/blog-810076-72722.html


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP