Utiliser des polices téléchargeables

Essayer Compose
Jetpack Compose est le kit d'outils d'interface utilisateur recommandé pour Android. Découvrez comment utiliser du texte dans Compose.
<ph type="x-smartling-placeholder"></ph> Polices téléchargeables →
<ph type="x-smartling-placeholder">

La fonctionnalité Polices téléchargeables permet aux API de demander des polices à une application de fournisseur au lieu regrouper des fichiers dans l'application ou laisser l'application télécharger des polices. Les polices téléchargeables sont disponibles sur les appareils exécutant la version 14 ou ultérieure de l'API Android via la bibliothèque AndroidX Core.

Les polices téléchargeables offrent les avantages suivants:

  • Réduit la taille de l'application, augmentant ainsi son taux de réussite d'installation.
  • Améliore l'état général du système, car plusieurs applications peuvent partager la même police via un un fournisseur de services agréé. Cela permet d'économiser des données mobiles, de la mémoire du téléphone et de l'espace disque. Dans ce modèle, est récupérée sur le réseau en cas de besoin.
Pour une expérience pratique des polices téléchargeables, consultez la DownloadableFonts (Polices téléchargeables) application exemple.

Comment les polices téléchargeables fonctionnent-elles ?

Un fournisseur de polices est une application qui récupère les polices et les met en cache localement afin que d’autres applications puissent demander et partager des polices. La figure suivante illustre ce processus.

Images montrant les principaux composants du processus de compatibilité des emoji
Image 1. Processus pour les polices téléchargeables.

Principes de base

Vous pouvez utiliser la fonctionnalité Polices téléchargeables des manières suivantes, qui sont décrites en détail : dans les sections suivantes:

Utiliser des polices téléchargeables avec Android Studio et les services Google Play

Vous pouvez configurer votre application pour télécharger des polices à l'aide d'Android Studio 3.0 ou version ultérieure. Pour vous aider pour commencer à utiliser les polices téléchargeables, vous pouvez utiliser le fournisseur de polices Google Play services.

<ph type="x-smartling-placeholder">
  1. Dans l'éditeur de mise en page, sélectionnez une TextView. Ensuite, sous Attributs, sélectionnez fontFamily > Autres polices. <ph type="x-smartling-placeholder">
    </ph> Image montrant l&#39;éditeur de mise en page Android Studio <ph type="x-smartling-placeholder">
    </ph> Figure 2. Utiliser l'éditeur de mise en page
    La fenêtre Ressources s'affiche.
  2. Dans le menu Source, sélectionnez Google Fonts.
  3. Dans la zone Polices, sélectionnez une police sous "Téléchargeable". dans une zone géographique spécifique.
  4. Sélectionnez Créer une police téléchargeable, puis cliquez sur OK. <ph type="x-smartling-placeholder">
    </ph> Image montrant comment sélectionner des polices dans la fenêtre &quot;Ressources&quot; <ph type="x-smartling-placeholder">
    </ph> Figure 3. Sélection d'une police dans la fenêtre Ressources.
  5. Android Studio génère automatiquement les fichiers XML nécessaires au rendu de la police correctement dans votre application.

    <ph type="x-smartling-placeholder">
    </ph> Image montrant comment prévisualiser les polices <ph type="x-smartling-placeholder">
    </ph> Figure 4 : Aperçu du fichier de police.

Utiliser des polices téléchargeables par programmation

À partir d'Android 8.0 (niveau d'API 26), AndroidX Core est entièrement compatible avec les polices téléchargeables. Pour en savoir plus sur l'utilisation de la bibliothèque AndroidX Core, consultez la Section sur la bibliothèque Polices téléchargeables AndroidX Core de cette page.

Pour utiliser la fonctionnalité Polices téléchargeables de manière programmatique, interagissez avec deux classes clés:

Votre application récupère les polices du fournisseur de polices à l'aide de l'API FontsContract. Chaque propose son propre ensemble de restrictions sur les versions d'Android et le langage de requête qu'il accepte. Pour plus d'informations sur les versions d'Android et le format de requête, consultez les dans la documentation Google Cloud.

Pour télécharger une police, procédez comme suit:

  1. Créez une instance de la classe android.graphics.fonts.FontRequest pour demander le du fournisseur. Pour créer une requête, transmettez les paramètres suivants: <ph type="x-smartling-placeholder">
      </ph>
    • Autorité du fournisseur de polices.
    • Package du fournisseur de polices permettant de vérifier l'identité du fournisseur.
    • Requête de chaîne de la police. Pour en savoir plus sur les formats de requête, reportez-vous à votre police la documentation du fournisseur, comme Google Fonts :
    • Liste d'ensembles de hachages des certificats permettant de vérifier l'identité du fournisseur. <ph type="x-smartling-placeholder">

    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);
    
    <ph type="x-smartling-placeholder">
  2. Créez une instance de FontsContract.FontRequestCallback .
  3. Remplacez les onTypefaceRetrieved() pour indiquer que la requête de police est terminée. Indiquez la police récupérée en tant que paramètre. Vous pouvez utiliser cette méthode pour définir la police selon vos besoins. Par exemple, vous pouvez définir la police TextView
  4. Remplacez les onTypefaceRequestFailed() pour recevoir des informations sur les erreurs survenues lors du processus de demande de police. Pour en savoir plus, sur les codes d'erreur, reportez-vous au Constantes de code d'erreur.
  5. Appelez la méthode FontsContract.requestFont() pour récupérer la police qu'elle contient. un fournisseur de services agréé. 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, il appelle le fournisseur de polices, récupère la police de manière asynchrone et transmet le résultat au rappel. Transmettez les paramètres suivants: <ph type="x-smartling-placeholder">
      </ph>
    • Une instance de la classe Classe Context
    • Une instance de la classe android.graphics.fonts.FontRequest
    • Un rappel pour recevoir les résultats de la requête de police
    • Un gestionnaire pour récupérer des polices sur un thread
    • <ph type="x-smartling-placeholder">

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 en savoir plus sur le téléchargement d'une police à partir d'un fournisseur de polices, consultez les DownloadableFonts (Polices téléchargeables) application exemple.

Utiliser des polices téléchargeables avec AndroidX Core

AndroidX Core est compatible avec la fonctionnalité Polices téléchargeables sur les appareils exécutant Android. API 14 ou version ultérieure. La androidx.core.provider le package contient les classes FontsContractCompat et FontRequest à implémenter la prise en charge des polices téléchargeables rétrocompatibles. Les classes AndroidX contiennent des méthodes similaire aux méthodes du framework. Le processus de téléchargement des polices est semblable à celui décrits dans la section de cette page à l'aide de polices téléchargeables par programmation.

Pour télécharger des polices à l'aide d'AndroidX, importez FontsContractCompat et Classes FontRequest du package androidx.core.provider Créer instances de ces classes au lieu FontsContract et android.graphics.fonts.FontRequest.

<ph type="x-smartling-placeholder">

Ajouter une dépendance AndroidX Core

Pour utiliser les classes FontsContractCompat et FontRequest, vous devez modifier les dépendances classpath de votre projet d'application dans votre environnement de développement.

Pour ajouter AndroidX Core à votre projet d'application, ajoutez la dépendance suivante au fichier Fichier build.gradle:

Groovy

dependencies {
    ...
    implementation "androidx.core:core-ktx:2.2.0"
}

Kotlin

dependencies {
    ...
    implementation("androidx.core:core-ktx:2.2.0")
}

Utiliser des polices téléchargeables comme ressources en XML

Android 8.0 (niveau d'API 26) et AndroidX Core offrent un moyen plus rapide et plus pratique de déclarer un personnalisée comme ressource dans la mise en page XML. Il n'est donc pas nécessaire de regrouper la police un élément. Vous pouvez définir une police personnalisée pour l'ensemble de votre thème, ce qui accélère la convivialité des plusieurs épaisseurs et styles, tels que gras, moyen ou léger, le cas échéant.

  1. Créez un fichier XML dans le dossier res/font.
  2. Ajoutez un élément racine <font-family> et définissez les attributs liés à la police, comme suit : 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. Faites référence au fichier en tant que @font/font_file_name dans le fichier XML de mise en page. Vous pouvez également utilisez la getFont() pour récupérer le fichier par programmation, par exemple getFont(R.font.font_file_name)

Pré-déclarer les polices dans le fichier manifeste

Le gonflage de la mise en page et la récupération des ressources sont des tâches synchrones. Par défaut, la première tentative de L'extraction des polices déclenche une requête auprès du fournisseur de polices, ce qui augmente la première mise en page. en temps réel. Pour éviter ce délai, vous pouvez pré-déclarer les polices qui doivent être récupérées dans votre fichier manifeste. Une fois que le système a récupéré la police auprès du fournisseur, celle-ci est disponible immédiatement. Police If la récupération prend plus de temps que prévu, le système annule le processus d'extraction et utilise .

Pour pré-déclarer des polices dans le fichier manifeste, procédez comme suit:

  1. Créez un tableau de ressources dans res/values/arrays.xml et déclarez les polices que vous que vous souhaitez précharger.
  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. Utilisez une balise meta-data pour déclarer le tableau de ressources dans votre fichier manifeste.
  4. <meta-data android:name="preloaded_fonts" android:resource="@array/preloaded_fonts" />
    

Ajouter des certificats

Lorsqu'un fournisseur de polices n'est pas préinstallé, ou si vous utilisez la bibliothèque AndroidX Core, déclarez 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.

<ph type="x-smartling-placeholder">

Pour ajouter des certificats, procédez comme suit:

  1. Créez un tableau de chaînes contenant les détails du certificat. Pour en savoir plus sur les certificats 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éfinissez l'attribut fontProviderCerts sur le tableau.
  4. android:fontProviderCerts="@array/certs"
    
    <ph type="x-smartling-placeholder">

Polices téléchargeables dans Compose

Début dans Compose version 1.2-alpha07, vous pouvez utiliser l'API Downloadable Fonts dans votre application Compose pour télécharger Google Fonts de manière asynchrone et les utiliser dans votre application. Pour Pour en savoir plus, consultez les Documentation sur les polices téléchargeables Compose.