Polices téléchargeables

  • par

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.

Composants principaux du processus Emoji compat
Figure 1. Processus des polices téléchargeables

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.

  1. Dans l’éditeur de mise en page, sélectionnez un TextView, puis sous Propriétés, sélectionnez fontFamily > Plus de polices.
    Éditeur de mise en page
    Figure 2. Utilisation de l’éditeur de mise en page

    La fenêtre Ressources apparaît.

  2. Dans la liste déroulante Source, sélectionnez Google Fonts.
  3. Dans la zone Polices, sélectionnez une police.
  4. 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.

    Éditeur de mise en page
    Figure 3. Sélection de la police dans la fenêtre Ressources
  5. Androïd Studio génère automatiquement les fichiers XML pertinents qui sont nécessaires pour rendre la police correctement dans votre application.

    Layout editor
    Figure 4. Prévisualisation du fichier de police

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 objet Typeface 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 :

  1. 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.

  2. Créer une instance de la classe FontsContract.FontRequestCallback.
  3. 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 un TextView
  4. 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 la error code constants.
  5. 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.

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 :

  1. Ouvrir le fichier build.gradle de votre application.
  2. 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.

  1. Créer un nouveau fichier XML dans le dossier res/font.
  2. Ajoutez l’élément racine <font-family> et définissez les attributs relatifs à la police comme indiqué dans l’exemple de fichier XML suivant :
  3. <?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>
  4. 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).

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 :

  1. 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.
  2. 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>
  3. Utiliser une balise meta-data pour déclarer le tableau de ressources dans votre manifeste.
  4. <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 :

  1. 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.
  2. <?xml version="1.0" encoding="utf-8"?><resources> <string-array name="certs"> <item>MIIEqDCCA5CgAwIBAgIJA071MA0GCSqGSIb3DQEBBAUAMIGUMQsww...</item> </string-array></resources>
  3. Définir l’attribut fontProviderCerts au tableau.
  4. 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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *