Androïd 8.0 (niveau 26 de l’API) et Android Support Library 26 introduisent la prise en charge des API pour demander des polices à une application fournisseur au lieu de regrouper les fichiers dans l’APK ou de laisser l’APK télécharger les polices. La fonctionnalité est disponible sur les appareils exécutant les versions 14 et supérieures de l’API Android via la bibliothèque de support 26.
La fonctionnalité des polices téléchargeables offre les avantages suivants :
- Réduit la taille de l’APK
- Augmente le taux de réussite de l’installation de l’app
- Améliore la santé globale du système car plusieurs APK peuvent partager la même police via un fournisseur. Cela permet aux utilisateurs d’économiser les données cellulaires, la mémoire du téléphone et l’espace disque. Dans ce modèle, la police est récupérée sur le réseau lorsque cela est nécessaire.
Référez-vous aux ressources connexes suivantes :
- Application type Downloadable Fonts Java | Kotlin
Comment fonctionne Downloadable Fonts?
Un fournisseur de polices est une application qui récupère les polices et les met en cache localement afin que d’autres apps puissent demander et partager des polices. La figure 1 illustre le processus.
Les bases
Vous pouvez utiliser la fonctionnalité des polices téléchargeables de la manière suivante :
- via Android Studio et les services Google Play
- Programmatiquement
- Via la bibliothèque de support
Utilisation des polices téléchargeables via Android Studio et les services Google Play
Vous pouvez configurer votre application pour télécharger des polices en utilisant Android Studio 3.0 ou supérieur. Pour vous aider à démarrer avec les fonctionnalités des polices téléchargeables, vous pouvez utiliser le fournisseur de polices des services Google Play.
Remarque : un appareil doit disposer de la version 11 ou supérieure des services Google Play pour utiliser le fournisseur de polices Google Fonts.
- Dans l’éditeur de mise en page, sélectionnez un TextView, puis sous Propriétés, sélectionnez fontFamily > Plus de polices.
La fenêtre Ressources apparaît.
- Dans la liste déroulante Source, sélectionnez Google Fonts.
- Dans la zone Polices, sélectionnez une police.
- Sélectionnez Créer une police téléchargeable et cliquez sur OK.
Note : pour regrouper la police dans votre application, sélectionnez Ajouter la police au projet.
Androïd Studio génère automatiquement les fichiers XML pertinents qui sont nécessaires pour rendre la police correctement dans votre application.
Utilisation programmatique des polices téléchargeables
Avant Android 8.0 (niveau 26 de l’API), la bibliothèque de support 26.0 fournit un support complet des polices téléchargeables. Pour plus d’informations sur l’utilisation de la bibliothèque de support, consultez la section Bibliothèque de support Downloadable Fonts.
Pour utiliser la fonctionnalité des polices téléchargeables de manière programmatique, vous devez interagir avec deux classes clés :
-
android.graphics.fonts.FontRequest
: cette classe vous permet de créer une demande de police. -
FontsContract
: Cette classe vous permet de créer un nouvel objetTypeface
basé sur la requête de police.
Votre application récupère les polices auprès du fournisseur de polices en utilisant l’API FontsContract
. Chaque fournisseur a son propre ensemble de restrictions sur les versions d’Android et le langage de requête qu’il prend en charge. Pour plus d’informations sur les versions d’Android et le format de requête, consultez la documentation de votre fournisseur.
Pour télécharger une police, effectuez les étapes suivantes :
- Créer une instance de la classe
android.graphics.fonts.FontRequest
pour demander la police au fournisseur. Pour créer une requête, passez les paramètres suivants :- L’autorité du fournisseur de polices
- Le paquet du fournisseur de polices pour vérifier l’identité du fournisseur
- La requête de chaîne de la police. Pour plus d’informations sur les formats de requête, consultez la documentation de votre fournisseur de polices, par exemple Google Fonts.
- Une liste de jeux de hachages pour les certificats afin de vérifier l’identité du fournisseur.
Note : Il n’est pas nécessaire d’ajouter un certificat si vous demandez des polices à des fournisseurs préinstallés. Cependant, vous devez toujours fournir un certificat si vous demandez des polices via la bibliothèque de support.
Kotlin
val request = FontRequest( "com.example.fontprovider.authority", "com.example.fontprovider", "my font", certs)
Java
FontRequest request = new FontRequest("com.example.fontprovider", "com.example.fontprovider", "my font", certs);
Note : Vous pouvez recevoir les valeurs des paramètres de votre fournisseur de polices. Android Studio renseigne automatiquement ces valeurs pour les fournisseurs qu’il prend en charge dans son interface utilisateur.
- Créer une instance de la classe
FontsContract.FontRequestCallback
. - Surmonter la méthode
onTypefaceRetrieved()
pour indiquer que la demande de police est terminée. Fournissez la police récupérée comme paramètre. Vous pouvez utiliser cette méthode pour définir la police, si nécessaire. Par exemple, vous pouvez définir la police sur unTextView
- Override la méthode
onTypefaceRequestFailed()
pour recevoir des informations sur les erreurs dans le processus de demande de police. Pour plus d’informations sur les codes d’erreur, consultez laerror code constants
. - Appelle la méthode
FontsContract.requestFont()
pour récupérer la police auprès du fournisseur de polices. La méthode lance une vérification pour déterminer si la police existe dans le cache. Si la police n’est pas disponible localement, elle appelle le fournisseur de polices, récupère la police de manière asynchrone et transmet le résultat à la callback. Passez les paramètres suivants :- une instance de la classe
Context
- une instance de la classe
android.graphics.fonts.FontRequest
- un callback pour recevoir les résultats de la demande de police
- un handler pour récupérer les polices sur un thread
Note : Assurez-vous que ce handler n’est pas le handler du thread de l’interface utilisateur.
- une instance de la classe
L’exemple de code suivant illustre le processus global des polices téléchargeables :
Kotlin
val 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)
Java
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, handler, null, callback);
Pour plus d’informations sur la façon de télécharger une police à partir d’un fournisseur de polices, consultez l’exemple d’application Downloadable Fonts Java | Kotlin.
Utilisation de Downloadable Fonts via la bibliothèque de support
La bibliothèque de support 26 fournit un support à la fonctionnalité Downloadable Fonts sur les appareils exécutant les versions 14 ou supérieures de l’API Android. Le paquet android.support.v4.provider
contient des classes FontsContractCompat
et FontRequest
pour mettre en œuvre le support rétrocompatible de la fonctionnalité Downloadable Fonts. Les classes de la bibliothèque de support contiennent des méthodes similaires à celles du framework. Le processus de téléchargement des polices est également similaire à celui mentionné dans la section Téléchargement des polices.
Pour télécharger des polices en utilisant la bibliothèque de support, importez les classes FontsContractCompat
et FontRequest
du paquet android.support.v4.provider
. Créez les instances de ces classes à la place des classes du framework FontsContract
et android.graphics.fonts.FontRequest
.
Note : Vous devez fournir un certificat lorsque vous demandez des polices par le biais de la bibliothèque de support. Ceci est applicable même pour les fournisseurs de polices préinstallés.
Ajout d’une dépendance de la bibliothèque de support
Pour utiliser les classes FontsContractCompat
et FontRequest
, vous devez modifier les dépendances du classpath de votre projet d’application au sein de votre environnement de développement.
Pour ajouter une bibliothèque de support à votre projet d’application :
- Ouvrir le fichier
build.gradle
de votre application. - Ajouter la bibliothèque de support à la section
dependencies
.
dependencies { ... compile "com.android.support:support-compat:28.0.0"}
Utiliser les polices téléchargeables comme ressources dans XML
Android 8.0 (niveau 26 de l’API) et la bibliothèque de support 26 offrent un moyen plus rapide et plus pratique de déclarer une police personnalisée comme ressource dans la disposition XML. Cela signifie qu’il n’est pas nécessaire de regrouper la police en tant qu’actif. Vous pouvez définir une police personnalisée pour l’ensemble de votre thème, ce qui accélère la convivialité pour plusieurs poids et styles, tels que Bold, Medium ou Light, lorsqu’ils sont fournis.
- Créer un nouveau fichier XML dans le dossier
res/font
. - Ajoutez l’élément racine
<font-family>
et définissez les attributs relatifs à la police comme indiqué dans l’exemple de fichier XML suivant : - Référer au fichier comme @font/font_file_name dans le fichier XML de mise en page. Vous pouvez également utiliser la méthode
getFont()
pour récupérer le fichier de manière programmatique. Par exemple,getFont(R.font.font_file_name)
.
<?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>
Prédéclaration des polices dans le manifeste
Le gonflage du layout et la récupération des ressources sont des tâches synchrones. Par défaut, la première tentative de récupération des polices déclenche une requête auprès du fournisseur de polices, et augmente donc le temps de la première mise en page. Pour éviter ce délai, vous pouvez prédéclarer les polices qui doivent être récupérées dans votre manifeste. Une fois que le système a récupéré la police auprès du fournisseur, elle est disponible immédiatement. Si la récupération de la police prend plus de temps que prévu, le système interrompt le processus de récupération et utilise la police par défaut.
Pour prédéclarer les polices dans le manifeste, effectuez les étapes suivantes :
- Créer un tableau de ressources dans
res/values/arrays.xml
et déclarer les polices téléchargeables que vous souhaitez récupérer à l’avance. - Utiliser une balise
meta-data
pour déclarer le tableau de ressources dans votre manifeste.
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>
<meta-data android:name="preloaded_fonts" android:resource="@array/preloaded_fonts" />
Ajout de certificats
Lorsqu’un fournisseur de polices n’est pas préinstallé ou si vous utilisez la bibliothèque de support, vous devez déclarer les certificats avec lesquels le fournisseur de polices est signé. Le système utilise les certificats pour vérifier l’identité du fournisseur de polices.
Note : Android Studio peut automatiquement renseigner les valeurs du fournisseur de services Google Play si vous utilisez l’outil de sélection des polices dans Android Studio. Pour plus d’informations sur l’utilisation d’Android Studio pour le téléchargement de polices, consultez la section Utilisation de polices téléchargeables via Android Studio et les services Google Play.
Exécutez les étapes suivantes pour ajouter des certificats :
- Créer un tableau de chaînes avec les détails du certificat. Pour plus d’informations sur les détails du certificat, consultez la documentation de votre fournisseur de polices.
- Définir l’attribut
fontProviderCerts
au tableau.
<?xml version="1.0" encoding="utf-8"?><resources> <string-array name="certs"> <item>MIIEqDCCA5CgAwIBAgIJA071MA0GCSqGSIb3DQEBBAUAMIGUMQsww...</item> </string-array></resources>
android:fontProviderCerts="@array/certs"
Note : si le fournisseur possède plus d’un ensemble de certitudes, vous pouvez définir un tableau de tableaux de chaînes.