Il set standard di emoji viene aggiornato ogni anno da Unicode, poiché l'utilizzo delle emoji sta aumentando rapidamente per tutti i tipi di app.
Se la tua app mostra contenuti di internet o fornisce l'inserimento di testo, ti consigliamo vivamente di supportare i caratteri emoji più recenti. In caso contrario, le emoji successive potrebbero essere visualizzate come un piccolo riquadro quadrato chiamato tofu (☐) o altre sequenze di emoji visualizzate in modo errato.
Le versioni di Android 11 (livello API 30) e precedenti non possono aggiornare il carattere delle emoji, pertanto le app che le mostrano 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) |
La BOM di marzo 2023 (Compose UI 1.4) offre il supporto per l'ultima versione delle emoji, inclusa la compatibilità con le versioni precedenti di Android fino all'API 21.
Questo supporto non richiede modifiche alla tua app: se utilizzi Text e TextField (Material 2 o Material 3) o BasicText e BasicTextField, il supporto delle emoji moderne è già pronto all'uso.
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 che Compose nello stesso Activity, assicurati di utilizzare le API appropriate per configurare correttamente le emoji. Le sezioni seguenti descrivono quando utilizzare ciascuna API.
Estensione da ComponentActivity
Se il tuo Activity si estende da Compose ComponentActivity anziché da AppCompatActivity, segui le istruzioni riportate in Supporta le emoji senza AppCompat.
Poiché non stai estendendo AppCompatActivity, aggiungi la libreria Emoji2 alle tue dipendenze e utilizza EmojiTextView nelle tue visualizzazioni anziché il widget TextView, come mostrato nello snippet seguente:
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 Activity estende 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 estendi da AppCompatActivity, esegui l'inflate di TextView da XML per visualizzare correttamente le emoji.
Questo vale se stai eseguendo l'inflating dell'XML:
- al di fuori di
ComposeView, nelActivity. Nota l'utilizzo diAppCompatActivityeTextViewnello snippet seguente:
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 l'associazione delle visualizzazioni utilizzandoAndroidViewBinding, come nello snippet seguente:
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 eseguire il rendering corretto delle 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 i dettagli, consulta la documentazione relativa alle API di interoperabilità.
Risoluzione dei problemi
Se vedi il tofu (☐) anziché l'emoji, controlla innanzitutto se il problema riguarda il tuo dispositivo di test specifico. Ecco alcuni aspetti principali che puoi controllare:
- Potresti utilizzare un dispositivo con flash 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.
- Il telefono 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
- Scorrere