版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36707431/article/details/78959870
可下载的字体是一种功能,允许应用程序从提供程序请求某种字体,而不是捆绑或自行下载。 这意味着,不需要将字体捆绑在asset资源文件中。
有两种请求下载字体的方法:(如果使用支持库,该功能将返回API级别14。)
一、要请求从Java代码下载字体,您需要先创建一个FontRequest类
FontRequest request = new FontRequest(
"com.google.android.gms.fonts", // ProviderAuthority
"com.google.android.gms", // ProviderPackage
query, // Query查询的字体
R.array.com_google_android_gms_fonts_certs); // Certificates
然后通过网络去下载字体
private Handler getHandlerThreadHandler() {
if (mHandler == null) {
HandlerThread handlerThread = new HandlerThread("fonts");
handlerThread.start();
mHandler = new Handler(handlerThread.getLooper());
}
return mHandler;
}
FontsContractCompat.requestFont(context, request, callback, handler);//上下文、请求参数、请求回掉、Handler
二、
在XML文件中声明下载的字体(Lobster Two),并让系统为您下载并在布局中使用它。
<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="Lobster Two"
app:fontProviderCerts="@array/com_google_android_gms_fonts_certs">
</font-family>
通过在XML文件中定义请求的字体并将预加载字体数组和元数据标签放在AndroidManifest中,可以避免延迟,直到字体被第一次尝试下载为止。
<resources>
<array name="preloaded_fonts" translatable="false">
<item>@font/lobster_two</item>
</array>
</resources>
<application >
...
<meta-data android:name="preloaded_fonts" android:resource="@array/preloaded_fonts" />
...
</application>
然后在布局文件里的控件中使用fontFamily 引入改字体。
唯一的遗憾就是国内没法使用!!!