L'ensemble standard d'emoji est actualisé tous les ans par Unicode, car leur utilisation augmente rapidement pour tous les types d'applications.
Si votre application affiche du contenu Internet ou fournit de la saisie de texte, nous vous recommandons vivement de prendre en charge les dernières polices d'emoji. Sinon, les emoji ultérieurs peuvent s'afficher sous la forme d'une petite zone carrée nommée tofu (théâtre ) ou d'autres séquences d'emoji mal affichées.
Android 11 (niveau d'API 30) ou version antérieure ne peut pas mettre à jour la police des emoji. Les applications qui les affichent sur ces versions doivent donc être mises à jour manuellement.
Voici des exemples d'emoji modernes.
Exemples | Version |
---|---|
🫠 🫱🏼🫲🏿 🫰🏽 | 14.0 (septembre 2021) |
😶🌫️ 🧔🏻♀️ 🧑🏿❤️🧑🏾 | 13.1 (septembre 2020) |
🥲 🥷🏿 🐻❄️ | 13.0 (mars 2020) |
🧑🏻🦰 🧑🏿🦯 👩🏻🤝👩🏼 | 12.1 (octobre 2019) |
🦩 🦻🏿 👩🏼🤝👩🏻 | 12.0 (février 2019) |
La nomenclature de mars 2023 (UI Compose 1.4) est compatible avec la dernière version des emoji, y compris la rétrocompatibilité avec les anciennes versions d'Android jusqu'à l'API 21.
Cette prise en charge ne nécessite aucune modification de votre application. Si vous utilisez Text
et TextField
(Material 2 ou Material 3) ou BasicText
et BasicTextField
, vous bénéficierez d'une prise en charge moderne des emoji dès la première utilisation.
Le meilleur moyen de tester les derniers emoji de votre application est d'utiliser un vrai appareil doté du niveau d'API 30 ou inférieur.
Si vous utilisez une solution d'emoji personnalisée ou si vous devez désactiver la résolution d'emoji par défaut dans Compose pour une autre raison, vous pouvez utiliser PlatformTextStyle(emojiSupportMatch)
:
Text( text = "Hello $EMOJI_TEXT", style = TextStyle( platformStyle = PlatformTextStyle( emojiSupportMatch = EmojiSupportMatch.None )/* ... */ ) )
Interopérabilité
Si votre application utilise à la fois des vues et Compose dans le même Activity
, assurez-vous d'utiliser les API appropriées pour configurer correctement les emoji. Les sections suivantes décrivent dans quelles circonstances utiliser chaque API.
Extension depuis ComponentActivity
Si votre Activity
s'étend à partir de Compose ComponentActivity
au lieu de AppCompatActivity
, suivez les instructions de la section Prendre en charge les emoji sans AppCompat.
Comme vous n'étendez pas AppCompatActivity
, ajoutez la bibliothèque Emoji2 à vos dépendances et utilisez EmojiTextView
dans vos vues au lieu du widget TextView
, comme indiqué dans l'extrait suivant:
class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val emojiTextView: EmojiTextView = findViewById(R.id.emoji_text_view) emojiTextView.text = getString(R.string.emoji_text_view, EMOJI_TEXT) val composeView: ComposeView = findViewById(R.id.compose_view) composeView.apply { setContent { // compose code } } } }
Ensuite, dans le fichier XML:
<androidx.emoji2.widget.EmojiTextView android:id="@+id/emoji_text_view" android:layout_width="match_parent" android:layout_height="wrap_content" />
Extension depuis AppCompatActivity
Si votre Activity
s'étend à partir de AppCompatActivity
, vous pouvez utiliser ComposeView
pour appeler des fonctions composables. Les emoji s'affichent correctement dans toutes les versions d'Android lorsque vous utilisez des composables Text.
Si vous passez à partir de AppCompatActivity
, gonflez TextView
à partir du fichier XML pour que les emoji s'affichent correctement.
Cela s'applique si vous gonflez le code XML:
- en dehors de
ComposeView
, dans leActivity
. Notez l'utilisation deAppCompatActivity
etTextView
dans l'extrait de code suivant:
class MyActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val emojiTextView: TextView = findViewById(R.id.emoji_text_view) emojiTextView.text = getString(R.string.emoji_text_view, EMOJI_TEXT) val composeView: ComposeView = findViewById(R.id.compose_view) composeView.apply { setContent { // compose code } } } }
- dans
ComposeView
, via la liaison de vue à l'aide deAndroidViewBinding
, comme dans l'extrait de code suivant:
class MyActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView( ComposeView(this).apply { setContent { Column { Text(EMOJI_TEXT) AndroidViewBinding(ExampleViewBinding::inflate) { emojiTextView.text = EMOJI_TEXT } } } } ) } }
Pour gonfler un texte avec AndroidView
dans ComposeView
, utilisez AppCompatTextView
pour afficher correctement les emoji:
class MyActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView( ComposeView(this).apply { setContent { Column { Text(EMOJI_TEXT) AndroidView( factory = { context -> AppCompatTextView(context) }, update = { it.text = EMOJI_TEXT } ) } } } ) } }
Pour en savoir plus, consultez la documentation des API d'interopérabilité.
Dépannage
Si vous voyez du tofu (théâtre ) au lieu de l'emoji, commencez par vérifier si le problème vient de votre appareil de test spécifique. Voici quelques points importants à vérifier:
- Vous utilisez peut-être un appareil récemment flashé ou un nouvel émulateur. Si possible, essayez un autre appareil de test que vous utilisez souvent et qui est connecté à votre compte Google. N'oubliez pas que l'API doit avoir une version inférieure ou égale à 30 pour vous assurer que les emoji fonctionnent avec les bonnes versions.
- Le téléphone de test n'est pas compatible avec les polices téléchargeables.
- Vérifiez que vous utilisez la version correcte des services Google Play.
Recommandations personnalisées
- Remarque : Le texte du lien s'affiche lorsque JavaScript est désactivé
- Autres points à prendre en compte
- Texte dans Compose
- Défilement