L'ensemble standard d'emojis est mis à jour chaque année par Unicode, car l'utilisation des emojis augmente rapidement pour tous les types d'applications.
Si votre application affiche du contenu Internet ou fournit une saisie de texte, nous vous recommandons vivement de prendre en charge les dernières polices d'emoji. Sinon, les emoji plus récents peuvent s'afficher sous la forme d'un petit carré appelé tofu (☐) ou d'autres séquences d'emoji incorrectement affichées.
Les versions d'Android 11 (niveau d'API 30) et antérieures ne peuvent pas mettre à jour la police d'emoji. Par conséquent, les applications qui les affichent sur ces versions doivent être mises à jour manuellement.
Voici des exemples d'emojis modernes.
| Exemples | Version |
|---|---|
| 🇨🇶 | 16.0 (septembre 2024) |
| 🐦🔥 🧑🧑🧒🧒 👩🏽🦽➡️ 🇲🇶 | 15.1 (septembre 2023) |
| 🩷 🫸🏼 🐦⬛ | 15.0 (septembre 2022) |
| 🫠 🫱🏼🫲🏿 🫰🏽 | 14.0 (septembre 2021) |
| 😶🌫️ 🧔🏻♀️ 🧑🏿❤️🧑🏾 | 13.1 (septembre 2020) |
| 🥲 🥷🏿 🐻❄️ | 13.0 (mars 2020) |
| 🧑🏻🦰 🧑🏿🦯 👩🏻🤝👩🏼 | 12.1 (octobre 2019) |
| 🦩 🦻🏿 👩🏼🤝👩🏻 | 12.0 (février 2019) |
La bibliothèque androidx.emoji2:emoji2 offre une rétrocompatibilité plus simple avec les versions antérieures d'Android. La bibliothèque emoji2 est une dépendance de la bibliothèque AppCompat et ne nécessite aucune configuration supplémentaire pour fonctionner.
Compatibilité avec les emoji dans Compose
La BOM de mars 2023 (Compose UI 1.4) est compatible avec la dernière version d'emoji, y compris la rétrocompatibilité avec les anciennes versions d'Android jusqu'à l'API 21. Cette page explique comment configurer les emoji modernes dans le système de vues. Pour en savoir plus, consultez la page Emoji dans Compose.
Prérequis
Pour vérifier que votre application affiche correctement les nouveaux emoji, lancez-la sur un appareil équipé d'Android 10 (niveau d'API 29) ou version antérieure. Cette page inclut des emoji modernes que vous pouvez afficher pour les tester.
Utiliser AppCompat pour prendre en charge les derniers emoji
AppCompat 1.4 inclut la prise en charge des emoji.
Pour utiliser AppCompat afin de prendre en charge les emoji, procédez comme suit :
Vérifiez que votre module dépend de la version 1.4.0-alpha01 ou ultérieure de la bibliothèque
AppCompat.build.gradle // Ensure version is 1.4.0-alpha01 or higher. implementation "androidx.appcompat:appcompat.$appcompatVersion"Assurez-vous que toutes les activités qui affichent du texte étendent la classe
AppCompatActivity.Kotlin
MyActivity.kt class MyActivity: AppCompatActivity { ... }
Java
MyActivity.java class MyActivity extends AppCompatActivity { ... }
Testez votre intégration en lançant votre application sur un appareil équipé d'Android 10 ou version antérieure et en affichant la chaîne de test suivante. Assurez-vous que tous les caractères s'affichent correctement.
- 16.0 : , , 🇨🇶
- 15.1 : 🐦🔥, 🧑🧑🧒🧒, 👩🏽🦽➡️, 🇲🇶
- 15.0 : 🩷, 🫸🏼, 🐦⬛
- 14.0 : 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1 : 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0 : 🥲, 🥷🏿, 🐻❄️
- 12.1 : 🧑🏻🦰, 🧑🏿🦯, 👩🏻🤝👩🏼
- 12.0 : 🦩, 🦻🏿, 👩🏼🤝👩🏻
Votre application affiche automatiquement les emoji rétrocompatibles sur tous les appareils qui fournissent un fournisseur de polices téléchargeables compatible avec emoji2, comme les appareils équipés des services Google Play.
Si votre application utilise AppCompat, mais affiche des caractères tofu (☐)
Dans certains cas, votre application peut afficher un tofu au lieu de l'emoji approprié, même si vous ajoutez la bibliothèque AppCompat. Voici quelques explications et solutions possibles.
Vous exécutez l'application sur un appareil récemment flashé ou sur un nouvel émulateur.
Effacez les données des services Google Play de l'application pour vider le cache des polices qui pourrait se produire au démarrage. Cela permet généralement de résoudre le problème après quelques heures.
Pour effacer les données de l'application, procédez comme suit :
Ouvrez les paramètres sur votre appareil Android.
Appuyez sur Applis et notifications.
Appuyez sur Afficher toutes les applications ou Infos sur les applis.
Faites défiler les applications et appuyez sur Services Google Play.
Appuyez sur Stockage et cache.
Sélectionnez Vider le cache.
Votre application n'utilise pas de classe AppCompat liée au texte
Cela peut se produire si vous n'étendez pas AppCompatActivity ou si vous instanciez une vue dans le code, comme TextView. Effectuez les vérifications suivantes :
- L'activité étend
AppCompatActivity. - Si vous créez la vue dans le code, utilisez la bonne sous-classe
AppCompat.
AppCompatActivity gonfle automatiquement AppCompatTextView à la place de TextView lors du gonflement du fichier XML. Vous n'avez donc pas besoin de mettre à jour votre fichier XML.
Le téléphone de test n'est pas compatible avec les polices téléchargeables
Vérifiez que DefaultEmojiCompatConfig.create renvoie une configuration non nulle.
Un émulateur sur un niveau d'API antérieur n'a pas mis à niveau les services Google Play
Lorsque vous utilisez un émulateur sur un niveau d'API antérieur, vous devrez peut-être mettre à jour les services Google Play groupés pour que emoji2 trouve le fournisseur de polices. Pour ce faire, connectez-vous au Google Play Store sur l'émulateur.
Pour vérifier qu'une version compatible est installée, procédez comme suit :
Exécutez la commande suivante :
adb shell dumpsys package com.google.android.gms | grep versionVérifiez que la valeur de
versionCodeest supérieure à celle de211200000.
Compatibilité avec les emoji sans AppCompat
Si votre application ne peut pas inclure AppCompat, elle peut utiliser emoji2 directement. Cette méthode nécessite plus de travail. Ne l'utilisez donc que si votre application ne peut pas utiliser AppCompat.
Pour prendre en charge les emoji sans la bibliothèque AppCompat, procédez comme suit :
Dans le fichier
build.gradlede votre application, incluezemoji2etemoji2-views.build.gradle def emojiVersion = "1.0.0-alpha03" implementation "androidx.emoji2:emoji2:$emojiVersion" implementation "androidx.emoji2:emoji2-views:$emojiVersion"Le module
emoji2-viewsfournit des sous-classes deTextView,ButtonetEditTextqui implémententEmojiCompat. Ne l'utilisez pas dans une application qui inclutAppCompat, car elle implémente déjàEmojiCompat.En XML et dans le code, partout où vous utilisez
TextView,EditTextouButton, utilisez plutôtEmojiTextView,EmojiEditTextouEmojiButton.activity_main.xml <androidx.emoji2.widget.EmojiTextView ... /> <androidx.emoji2.widget.EmojiEditText ... /> <androidx.emoji2.widget.EmojiButton ... />En incluant le module
emoji2, le système utilise le fournisseur de polices téléchargeables par défaut pour charger automatiquement la police d'emoji peu après le démarrage de l'application. Aucune configuration supplémentaire n'est requise.Pour tester votre intégration, lancez votre application sur un appareil équipé d'Android 11 ou d'une version antérieure et affichant les chaînes de test suivantes. Assurez-vous que tous les caractères s'affichent correctement.
- 16.0 : , , 🇨🇶
- 15.1 : 🐦🔥, 🧑🧑🧒🧒, 👩🏽🦽➡️, 🇲🇶
- 15.0 : 🩷, 🫸🏼, 🐦⬛
- 14.0 : 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1 : 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0 : 🥲, 🥷🏿, 🐻❄️
- 12.1 : 🧑🏻🦰, 🧑🏿🦯, 👩🏻🤝👩🏼
- 12.0 : 🦩, 🦻🏿, 👩🏼🤝👩🏻
Utiliser EmojiCompat sans widgets
EmojiCompat utilise EmojiSpan pour afficher les images correctes. Il doit donc convertir tout objet CharSequence donné en objet Spanned avec des objets EmojiSpan.
La classe EmojiCompat fournit la méthode process() pour convertir CharSequences en instances Spanned. Cette méthode vous permet d'appeler process() en arrière-plan et de mettre en cache les résultats, ce qui améliore les performances de votre application.
Kotlin
val processed = EmojiCompat.get().process("neutral face \uD83D\uDE10")
Java
CharSequence processed = EmojiCompat.get().process("neutral face \uD83D\uDE10");
Utiliser EmojiCompat pour les éditeurs de mode de saisie
La classe EmojiCompat permet aux claviers d'afficher les emoji compatibles avec l'application avec laquelle ils interagissent. Les éditeurs de mode de saisie (IME) peuvent utiliser la méthode getEmojiMatch() pour vérifier si une instance de EmojiCompat est capable d'afficher un emoji. Cette méthode utilise un CharSequence d'un emoji et renvoie true si EmojiCompat peut détecter et afficher l'emoji.
Le clavier peut également vérifier la version de EmojiCompat compatible avec l'application pour déterminer l'emoji à afficher dans la palette. Pour vérifier la version, si elle est disponible, le clavier peut rechercher les clés suivantes dans le bundle EditorInfo.extras :
EDITOR_INFO_METAVERSION_KEY: représente la version des métadonnées d'emoji utilisée par l'application. Si cette clé n'existe pas, l'application n'utilise pasEmojiCompat.EDITOR_INFO_REPLACE_ALL_KEY: si la clé existe et est définie surtrue, l'application configureEmojiCompatpour remplacer tous les emoji, même s'ils sont présents dans le système.
Découvrez comment configurer une instance d'EmojiCompat.
Utiliser des emoji dans les vues personnalisées
Si votre application comporte des vues personnalisées qui sont des sous-classes directes ou indirectes de TextView (par exemple, Button, Switch ou EditText) et que ces vues peuvent afficher du contenu généré par l'utilisateur, elles doivent chacune implémenter EmojiCompat.
La procédure varie selon que votre application utilise ou non la bibliothèque AppCompat.
Ajouter des vues personnalisées pour les applications avec AppCompat
Si votre application utilise AppCompat, étendez l'implémentation de AppCompat au lieu de celle de la plate-forme. Utilisez le tableau suivant comme guide pour étendre vos vues dans AppCompat :
| Au lieu d'étendre… | Prolonger |
|---|---|
TextView
|
AppCompatTextView
|
EditText
|
AppCompatEditText
|
ToggleButton
|
AppCompatToggleButton
|
Switch
|
SwitchCompat
|
Button
|
AppCompatButton
|
CheckedTextView
|
AppCompatCheckedTextView
|
RadioButton
|
AppCompatRadioButton
|
CheckBox
|
AppCompatCheckBox
|
AutoCompleteTextView
|
AppCompatAutoCompleteTextView
|
MultiAutoCompleteTextView
|
AppCompatMultiAutoCompleteTextView
|
Ajouter des vues personnalisées pour les applications sans AppCompat
Si votre application n'utilise pas AppCompat, utilisez les assistants d'intégration de vue du module emoji2-views-helper, conçus pour être utilisés dans des vues personnalisées. Il s'agit des outils d'aide utilisés par la bibliothèque AppCompat pour implémenter la compatibilité avec les emoji.
Pour prendre en charge les vues personnalisées pour les applications qui n'utilisent pas AppCompat, procédez comme suit :
Ajoutez la bibliothèque
emoji2-views-helper:implementation "androidx.emoji2:emoji2-views-helper:$emojiVersion"Suivez les instructions pour inclure
EmojiTextViewHelperouEmojiEditTextHelperdans les vues personnalisées de votre application.Testez votre intégration en lançant votre application sur un appareil équipé d'Android 10 ou version antérieure et en affichant la chaîne de test suivante. Assurez-vous que tous les caractères s'affichent correctement.
- 16.0 : , , 🇨🇶
- 15.1 : 🐦🔥, 🧑🧑🧒🧒, 👩🏽🦽➡️, 🇲🇶
- 15.0 : 🩷, 🫸🏼, 🐦⬛
- 14.0 : 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1 : 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0 : 🥲, 🥷🏿, 🐻❄️
- 12.1 : 🧑🏻🦰, 🧑🏿🦯, 👩🏻🤝👩🏼
- 12.0 : 🦩, 🦻🏿, 👩🏼🤝👩🏻
Fonctionnalités facultatives pour gérer emoji2
Après avoir inclus la bibliothèque emoji2 dans votre application, vous pouvez ajouter les fonctionnalités facultatives décrites dans cette section.
Configurer emoji2 pour utiliser une autre police ou un autre fournisseur de polices téléchargeables
Pour configurer emoji2 afin d'utiliser une autre police ou un autre fournisseur de polices téléchargeables, procédez comme suit :
Désactivez
EmojiCompatInitializeren ajoutant le code suivant à votre fichier manifeste :<provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" android:exported="false" tools:node="merge"> <meta-data android:name="androidx.emoji2.text.EmojiCompatInitializer" tools:node="remove" /> </provider>Effectuez l'une des opérations suivantes :
Utilisez la configuration par défaut en appelant
DefaultEmojiCompatConfiguration.create(context).Créez votre propre configuration pour charger des polices à partir d'une autre source à l'aide de
EmojiCompat.Config. Cette classe fournit plusieurs options pour modifier le comportement de votreEmojiCompat, comme décrit dans la section suivante.
Modifier le comportement d'EmojiCompat
Vous pouvez utiliser une instance de EmojiCompat.Config pour modifier le comportement de EmojiCompat.
L'option de configuration la plus importante est setMetadataLoadStrategy(), qui contrôle le moment où EmojiCompat charge la police. Le chargement des polices commence dès que EmojiCompat.load() est appelé, ce qui déclenche les téléchargements nécessaires. Le système crée un thread pour le téléchargement des polices, sauf si votre application en fournit un.
LOAD_STRATEGY_MANUAL vous permet de contrôler quand EmojiCompat.load() est appelé, et LOAD_STRATEGY_DEFAULT lance le chargement de manière synchrone dans l'appel à EmojiCompat.init().
La plupart des applications utilisent LOAD_STRATEGY_MANUAL pour contrôler le thread et le moment du chargement des polices. Votre application doit attendre que le premier écran s'affiche pour éviter d'introduire une latence au démarrage. EmojiCompatInitializer suit cette pratique et diffère le chargement de la police d'emoji jusqu'à la reprise du premier écran.
Utilisez les méthodes suivantes de la classe de base pour définir d'autres aspects de la configuration :
setReplaceAll(): détermine siEmojiCompatremplace tous les emoji qu'il trouve par des instances deEmojiSpan. Par défaut, lorsqueEmojiCompatdéduit que le système peut afficher un emoji, il ne le remplace pas. Lorsqu'il est défini surtrue,EmojiCompatremplace tous les emoji par des objetsEmojiSpan.setEmojiSpanIndicatorEnabled(): indique siEmojiCompatremplace un emoji par un objetEmojiSpan. Lorsqu'il est défini surtrue,EmojiCompatdessine un arrière-plan pourEmojiSpan. Cette méthode est principalement utilisée à des fins de débogage.setEmojiSpanIndicatorColor: définit la couleur pour indiquer unEmojiSpan. La valeur par défaut estGREEN.registerInitCallback(): informe une application de l'état de l'initialisation deEmojiCompat.
Ajouter des écouteurs d'initialisation
Les classes EmojiCompat et EmojiCompat.Config fournissent les méthodes registerInitCallback() et unregisterInitCallback() pour enregistrer et annuler l'enregistrement des rappels d'initialisation. Votre application utilise ces rappels pour attendre que EmojiCompat soit initialisé avant de traiter les emoji sur un thread d'arrière-plan ou dans une vue personnalisée.
Pour utiliser ces méthodes, créez une instance de la classe EmojiCompat.InitCallback. Appelez ces méthodes et transmettez l'instance de la classe EmojiCompat.InitCallback. Une fois l'initialisation réussie, la classe EmojiCompat appelle la méthode onInitialized(). Si l'initialisation de la bibliothèque échoue, la classe EmojiCompat appelle la méthode onFailed().
Pour vérifier l'état d'initialisation à tout moment, appelez la méthode getLoadState(). Cette méthode renvoie l'une des valeurs suivantes : LOAD_STATE_LOADING, LOAD_STATE_SUCCEEDED ou LOAD_STATE_FAILED.
Prise en charge des polices groupées avec emoji2
Vous pouvez utiliser l'artefact emoji2-bundled pour regrouper une police d'emoji dans votre application. Toutefois, comme la police NotoColorEmoji dépasse 10 Mo, nous vous recommandons vivement d'utiliser des polices téléchargeables dans votre application, si possible. L'artefact emoji2-bundled est destiné aux applications sur les appareils qui ne sont pas compatibles avec les polices téléchargeables.
Pour utiliser l'artefact emoji2-bundled, procédez comme suit :
Incluez les artefacts
emoji2-bundledetemoji2:implementation "androidx.emoji2:emoji2:$emojiVersion" implementation "androidx.emoji2:emoji2-bundled:$emojiVersion"Configurez
emoji2pour utiliser la configuration groupée :Kotlin
EmojiCompat.init(BundledEmojiCompatConfig(context))
Java
EmojiCompat.init(new BundledEmojiCompatConfig(context));
Testez l'intégration en suivant les étapes précédentes pour inclure
emojicompatavec ou sansAppCompat. Assurez-vous que la chaîne de test s'affiche correctement.- 16.0 : , , 🇨🇶
- 15.1 : 🐦🔥, 🧑🧑🧒🧒, 👩🏽🦽➡️, 🇲🇶
- 15.0 : 🩷, 🫸🏼, 🐦⬛
- 14.0 : 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1 : 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0 : 🥲, 🥷🏿, 🐻❄️
- 12.1 : 🧑🏻🦰, 🧑🏿🦯, 👩🏻🤝👩🏼
- 12.0 : 🦩, 🦻🏿, 👩🏼🤝👩🏻
Impact de la configuration automatique d'EmojiCompat
Le système applique la configuration par défaut à l'aide de la bibliothèque de démarrage, EmojiCompatInitializer et DefaultEmojiCompatConfig.
Après la première reprise d'activité dans votre application, l'initialiseur planifie le chargement de la police d'emoji. Ce court délai permet à votre application d'afficher son contenu initial sans latence potentielle due au chargement de la police dans un thread d'arrière-plan.
DefaultEmojiCompatConfig recherche un fournisseur de polices téléchargeables installé sur le système qui implémente l'interface EmojiCompat, comme les services Google Play. Sur les appareils équipés des services Google Play, la police est chargée à l'aide des services Google Play.
L'initialiseur crée un thread d'arrière-plan pour charger la police d'emoji. Le téléchargement de la police peut prendre jusqu'à 10 secondes avant d'expirer. Une fois la police téléchargée, l'initialisation de EmojiCompat prend environ 150 millisecondes sur un thread en arrière-plan.
Différez l'initialisation de EmojiCompat, même si vous désactivez EmojiCompatInitializer. Si vous configurez manuellement EmojiCompat, appelez EmojiCompat.load() après l'affichage du premier écran de votre application pour éviter les conflits en arrière-plan avec le chargement du premier écran.
Après le chargement, EmojiCompat utilise environ 300 Ko de RAM pour stocker les métadonnées des emoji.