Il set standard di emoji viene aggiornato annualmente da Unicode, poiché l'utilizzo delle emoji è in rapida crescita per tutti i tipi di app.
Se la tua app mostra contenuti internet o fornisce input di testo, ti consigliamo vivamente di supportare i caratteri emoji più recenti. In caso contrario, le emoji successive potrebbero essere visualizzate come una piccola casella quadrata chiamata tofu (☐) o altre sequenze di emoji con rendering errato.
Le versioni di Android 11 (livello API 30) e precedenti non possono aggiornare il carattere emoji, quindi le app che le visualizzano su queste versioni devono essere aggiornate manualmente.
Di seguito sono riportati alcuni esempi di emoji moderne.
| Esempi | Versione |
|---|---|
| 🇨🇶 | 16.0 (settembre 2024) |
| 🐦🔥 🧑🧑🧒🧒 👩🏽🦽➡️ 🇲🇶 | 15.1 (settembre 2023) |
| 🩷 🫸🏼 🐦⬛ | 15.0 (settembre 2022) |
| 🫠 🫱🏼🫲🏿 🫰🏽 | 14.0 (settembre 2021) |
| 😶🌫️ 🧔🏻♀️ 🧑🏿❤️🧑🏾 | 13.1 (settembre 2020) |
| 🥲 🥷🏿 🐻❄️ | 13.0 (marzo 2020) |
| 🧑🏻🦰 🧑🏿🦯 👩🏻🤝👩🏼 | 12.1 (ottobre 2019) |
| 🦩 🦻🏿 👩🏼🤝👩🏻 | 12.0 (febbraio 2019) |
Il BOM di marzo 2023 (Compose UI 1.4) supporta l'ultima versione delle emoji, inclusa la compatibilità con le versioni precedenti di Android fino all'API 21.
Questo supporto non richiede modifiche all'app— se utilizzi Text e
TextField (Material 2 o Material 3) o BasicText e
BasicTextField, ottieni il supporto delle emoji moderne immediatamente.
Il modo migliore per testare le emoji più recenti nella tua app è utilizzare un dispositivo reale con API 30 o versioni precedenti.
Se utilizzi una soluzione di emoji personalizzate o devi disattivare la risoluzione delle emoji predefinita in Compose per qualsiasi altro motivo, puoi utilizzare
PlatformTextStyle(emojiSupportMatch):
Text( text = "Hello $EMOJI_TEXT", style = TextStyle( platformStyle = PlatformTextStyle( emojiSupportMatch = EmojiSupportMatch.None )/* ... */ ) )
Interoperabilità
Se la tua app utilizza sia Views sia Compose nella stessa Activity, assicurati di utilizzare le API appropriate per configurare correttamente le emoji. Le sezioni seguenti descrivono quando utilizzare ciascuna API.
Estensione da ComponentActivity
Se la tua Activity estende da Compose ComponentActivity anziché da
AppCompatActivity, segui le istruzioni per supportare le emoji senza AppCompat.
Poiché non stai estendendo AppCompatActivity, aggiungi la Emoji2
libreria alle dipendenze e utilizza EmojiTextView nelle visualizzazioni
anziché il widget TextView, come mostrato nel seguente snippet:
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 } } } }
Poi, nel file XML:
<androidx.emoji2.widget.EmojiTextView android:id="@+id/emoji_text_view" android:layout_width="match_parent" android:layout_height="wrap_content" />
Estensione da AppCompatActivity
Se il tuo Activity estende da AppCompatActivity, puoi utilizzare
ComposeView per chiamare le funzioni componibili. Le emoji vengono visualizzate correttamente nelle versioni di Android quando utilizzi i componibili di testo.
Se stai estendendo da AppCompatActivity, espandi TextView da XML
per visualizzare correttamente le emoji.
Questo vale se stai espandendo l'XML:
- Al di fuori di
ComposeView, inActivity. Nota l'utilizzo diAppCompatActivityeTextViewnel seguente snippet:
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 } } } }
- all'interno di
ComposeView, tramite il binding delle visualizzazioni utilizzandoAndroidViewBinding, come nel seguente snippet:
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 } } } } ) } }
Per espandere un testo con AndroidView all'interno di ComposeView, utilizza
AppCompatTextView per visualizzare correttamente le 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 } ) } } } ) } }
Per maggiori dettagli, consulta la documentazione delle API di interoperabilità.
Risoluzione dei problemi
Se vedi tofu (☐) anziché l'emoji, controlla innanzitutto se il problema riguarda il tuo dispositivo di test specifico. Ecco alcune cose principali che puoi controllare:
- Potresti utilizzare un dispositivo con flash di recente o un nuovo emulatore. Se possibile, prova un altro dispositivo di test reale che utilizzi spesso e su cui hai eseguito l'accesso al tuo Account Google. Ricorda che l'API deve essere 30 o inferiore per garantire che le emoji funzionino nelle versioni corrette.
- Lo smartphone di test non supporta i caratteri scaricabili.
- Controlla la versione corretta di Google Play Services.
Consigliati per te
- Nota: il testo del link viene visualizzato quando JavaScript è disattivato
- Altre considerazioni
- Testo in Compose
- Scorrimento