Les emoji standards sont actualisés chaque année Unicode, car les emoji sont de plus en plus utilisés rapidement pour tous les types d'applications.
Si votre application affiche du contenu Internet ou fournit du texte, nous vous recommandons recommandent d'utiliser les dernières polices emoji. Sinon, les emoji ultérieurs peuvent être s'affiche sous la forme d'une petite boîte carrée appelée tofu (☐) ou d'un autre matériau mal affiché des séquences d'emoji.
Les versions d'Android 11 (niveau d'API 30) et antérieures ne peuvent pas mettre à jour la police des emoji. Par conséquent, les applications qui les affichent sur ces versions doivent ê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, mars 2023 (UI Compose 1.4) prend en charge les derniers emoji. , y compris la rétrocompatibilité avec les anciennes versions d'Android à 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éficiez d'une prise en charge immédiate des emoji modernes.
Le meilleur moyen de tester les derniers emoji dans votre application est d'utiliser un appareil réel utilisant le niveau d'API 30 ou inférieur.
Si vous utilisez une solution pour les emoji personnalisés ou si vous devez désactiver les emoji par défaut
dans Compose pour toute 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 de
utilisent les API appropriées pour configurer correctement les emoji. Les sections suivantes décrivent quand utiliser chaque API.
Extension à partir de ComponentActivity
Si votre Activity
s'étend de Compose ComponentActivity
au lieu de
AppCompatActivity
, suivez les instructions de la page Support emoji without AppCompat (Prendre en charge les emoji sans AppCompat).
instructions.
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 de code 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 } } } }
Puis, dans votre fichier XML:
<androidx.emoji2.widget.EmojiTextView android:id="@+id/emoji_text_view" android:layout_width="match_parent" android:layout_height="wrap_content" />
Prolongation à partir de AppCompatActivity
Si votre Activity
s'étend à partir de AppCompatActivity
, vous pouvez utiliser ComposeView
pour appeler des fonctions modulables. Les emoji s'affichent correctement
Versions d'Android lorsque vous utilisez des composables Text.
Si vous effectuez une extension à partir de AppCompatActivity
, gonflez TextView
à partir de XML
pour que les emoji s'affichent correctement.
Cette règle s'applique si vous gonflez le fichier XML :
- en dehors de
ComposeView
, dansActivity
. Notez l'utilisationAppCompatActivity
etTextView
dans l'extrait 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 sur les API d'interopérabilité.
Dépannage
Si tofu (☐) s'affiche à la place de l'emoji, vérifiez d'abord si le problème vient sur votre appareil de test spécifique. Voici quelques éléments à vérifier:
- Vous utilisez peut-être un appareil à flash récemment ou un nouvel émulateur. Si possible, essayez un autre appareil de test que vous utilisez souvent et sur lequel vous êtes connecté à votre compte Google. N'oubliez pas que le niveau d'API doit être inférieur ou égal à 30 pour que les emoji fonctionnent dans la bonne version.
- Le téléphone de test n'est pas compatible avec les polices téléchargeables.
- Vérifiez 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