Il set standard di emoji viene aggiornato annualmente da Unicode, poiché l'utilizzo delle emoji sta aumentando rapidamente per tutti i tipi di app.
Se la tua app mostra contenuti internet o consente 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 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, quindi le app che le visualizzano su queste versioni devono essere aggiornate manualmente.
Di seguito sono riportati alcuni esempi di emoji moderni.
| 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 libreria androidx.emoji2:emoji2 offre una retrocompatibilità più semplice
con le versioni precedenti di Android. La libreria emoji2 è una dipendenza della libreria
AppCompat e non richiede
ulteriori configurazioni per funzionare.
Supporto delle emoji in Scrivi
La 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. Questa pagina spiega come configurare le emoji moderne nel sistema di visualizzazione. Per saperne di più, consulta la pagina Emoji in Composizione.
Prerequisiti
Per verificare che la tua app visualizzi correttamente le emoji più recenti, avviala su un dispositivo con Android 10 (livello API 29) o versioni precedenti. Questa pagina include emoji moderni che puoi visualizzare per i test.
Utilizzare AppCompat per supportare le emoji più recenti
AppCompat La versione 1.4 include il supporto per le emoji.
Per utilizzare AppCompat per supportare le emoji:
Verifica che il modulo dipenda dalla versione
AppCompatdella libreria 1.4.0-alpha01 o successiva.build.gradle // Ensure version is 1.4.0-alpha01 or higher. implementation "androidx.appcompat:appcompat.$appcompatVersion"Assicurati che tutte le attività che mostrano testo estendano la
AppCompatActivitylezione.Kotlin
MyActivity.kt class MyActivity: AppCompatActivity { ... }
Java
MyActivity.java class MyActivity extends AppCompatActivity { ... }
Testa l'integrazione avviando l'app su un dispositivo con Android 10 o versioni precedenti e visualizzando la seguente stringa di test. Assicurati che tutti i caratteri vengano visualizzati correttamente.
- 16.0: , , 🇨🇶
- 15.1: 🐦🔥, 🧑🧑🧒🧒, 👩🏽🦽➡️, 🇲🇶
- 15.0: 🩷, 🫸🏼, 🐦⬛
- 14.0: 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1: 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0: 🥲, 🥷🏿, 🐻❄️
- 12.1: 🧑🏻🦰, 🧑🏿🦯, 👩🏻🤝👩🏼
- 12.0: 🦩, 🦻🏿, 👩🏼🤝👩🏻
La tua app mostra automaticamente le emoji compatibili con le versioni precedenti su tutti i dispositivi che
forniscono un provider di caratteri scaricabili compatibili con emoji2, ad esempio i dispositivi
con Google Play Services.
Se la tua app utilizza AppCompat ma mostra tofu (☐)
In alcuni casi, la tua app potrebbe visualizzare il tofu anziché l'emoji corretta, anche se
aggiungi la libreria AppCompat. Di seguito sono riportate possibili spiegazioni e
soluzioni.
Stai eseguendo l'app su un dispositivo di cui è stato eseguito il flashing di recente o su un nuovo emulatore
Cancella i dati di Google Play Services dell'app per cancellare qualsiasi memorizzazione nella cache dei caratteri che potrebbe verificarsi durante l'avvio. In genere il problema si risolve dopo qualche ora.
Per cancellare i dati dell'app:
Apri Impostazioni sul tuo dispositivo Android.
Tocca App e notifiche.
Tocca Mostra tutte le app o Informazioni app.
Scorri le app e tocca Google Play Services.
Tocca Spazio di archiviazione e cache.
Tocca Svuota cache.
La tua app non utilizza una classe AppCompat relativa al testo
Ciò può accadere se non estendi AppCompatActivity o se istanzi una
visualizzazione nel codice, ad esempio TextView. Controlla quanto segue.
- L'attività si estende per
AppCompatActivity. - Se crei la visualizzazione nel codice, utilizza la sottoclasse
AppCompatcorretta.
AppCompatActivity gonfia automaticamente AppCompatTextView al posto di
TextView durante il gonfiaggio dell'XML, quindi non devi aggiornare l'XML.
Lo smartphone di test non supporta i caratteri scaricabili
Verifica che DefaultEmojiCompatConfig.create restituisca una configurazione non nulla.
Un emulatore con un livello API precedente non ha eseguito l'upgrade di Google Play Services
Quando utilizzi un emulatore su un livello API precedente, potresti dover aggiornare
Google Play Services in bundle per emoji2 per trovare il fornitore di caratteri. Per farlo,
accedi al Google Play Store sull'emulatore.
Per verificare che sia installata una versione compatibile:
Esegui questo comando:
adb shell dumpsys package com.google.android.gms | grep versionVerifica che
versionCodesia superiore a211200000.
Supportare le emoji senza AppCompat
Se la tua app non può includere AppCompat, può utilizzare direttamente emoji2. Questa
richiede più lavoro, quindi utilizza questo metodo solo se la tua app non può utilizzare AppCompat.
Per supportare le emoji senza la libreria AppCompat:
Nel file
build.gradledell'app, includiemoji2eemoji2-views.build.gradle def emojiVersion = "1.0.0-alpha03" implementation "androidx.emoji2:emoji2:$emojiVersion" implementation "androidx.emoji2:emoji2-views:$emojiVersion"Il modulo
emoji2-viewsfornisce sottoclassi diTextView,ButtoneEditTextche implementanoEmojiCompat. Non utilizzarlo in un'app che includeAppCompat, perché implementa giàEmojiCompat.In XML e nel codice, ovunque utilizzi
TextView,EditTextoButton, utilizzaEmojiTextView,EmojiEditTextoEmojiButton.activity_main.xml <androidx.emoji2.widget.EmojiTextView ... /> <androidx.emoji2.widget.EmojiEditText ... /> <androidx.emoji2.widget.EmojiButton ... />Se includi il modulo
emoji2, il sistema utilizza il fornitore di caratteri scaricabili predefinito per caricare automaticamente il carattere emoji poco dopo l'avvio dell'app. Non è necessaria alcuna ulteriore configurazione.Per testare l'integrazione, avvia l'app su un dispositivo con Android 11 o versioni precedenti che mostri le seguenti stringhe di test. Assicurati che tutti i caratteri vengano visualizzati correttamente.
- 16.0: , , 🇨🇶
- 15.1: 🐦🔥, 🧑🧑🧒🧒, 👩🏽🦽➡️, 🇲🇶
- 15.0: 🩷, 🫸🏼, 🐦⬛
- 14.0: 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1: 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0: 🥲, 🥷🏿, 🐻❄️
- 12.1: 🧑🏻🦰, 🧑🏿🦯, 👩🏻🤝👩🏼
- 12.0: 🦩, 🦻🏿, 👩🏼🤝👩🏻
Utilizzare EmojiCompat senza widget
EmojiCompat utilizza EmojiSpan per
visualizzare le immagini corrette. Pertanto, deve convertire qualsiasi oggetto
CharSequence in un oggetto
Spanned con oggetti EmojiSpan.
La classe EmojiCompat fornisce il metodo process() per convertire CharSequences
in istanze Spanned. Utilizzando questo metodo, puoi chiamare process() in background e memorizzare nella cache i risultati, il che migliora le prestazioni della tua app.
Kotlin
val processed = EmojiCompat.get().process("neutral face \uD83D\uDE10")
Java
CharSequence processed = EmojiCompat.get().process("neutral face \uD83D\uDE10");
Utilizzare EmojiCompat per gli editor dei metodi di input
La classe EmojiCompat consente alle tastiere di eseguire il rendering delle emoji supportate dall'app
con cui interagiscono. Gli Input Method Editor (IME) possono utilizzare il metodo getEmojiMatch() per verificare se un'istanza di EmojiCompat è in grado di eseguire il rendering di un emoji. Questo metodo accetta un CharSequence
di un'emoji e restituisce true se EmojiCompat è in grado di rilevare e visualizzare l'emoji.
La tastiera può anche controllare la versione di EmojiCompat supportata dall'app
per determinare quale emoji visualizzare nella tavolozza. Per controllare la versione, se
disponibile, la tastiera può cercare le seguenti chiavi nel
bundle EditorInfo.extras:
EDITOR_INFO_METAVERSION_KEY: rappresenta la versione dei metadati delle emoji utilizzata dall'app. Se questa chiave non esiste, l'app non utilizzaEmojiCompat.EDITOR_INFO_REPLACE_ALL_KEY: se la chiave esiste ed è impostata sutrue, la configurazione dell'appEmojiCompatsostituisce tutte le emoji, anche se sono presenti nel sistema.
Scopri di più su come configurare un'istanza di EmojiCompat.
Utilizzare le emoji nelle visualizzazioni personalizzate
Se la tua app ha visualizzazioni personalizzate che sono sottoclassi dirette o indirette di TextView, ad esempio Button, Switch o EditText, e queste visualizzazioni possono mostrare contenuti generati dagli utenti, devono implementare ciascuna EmojiCompat.
La procedura varia a seconda che la tua app utilizzi la libreria AppCompat.
Aggiungere visualizzazioni personalizzate per le app con AppCompat
Se la tua app utilizza AppCompat, estendi l'implementazione di AppCompat anziché
l'implementazione della piattaforma. Utilizza la seguente tabella come guida per estendere le visualizzazioni in AppCompat:
| Invece di estendere... | Estendi |
|---|---|
TextView
|
AppCompatTextView
|
EditText
|
AppCompatEditText
|
ToggleButton
|
AppCompatToggleButton
|
Switch
|
SwitchCompat
|
Button
|
AppCompatButton
|
CheckedTextView
|
AppCompatCheckedTextView
|
RadioButton
|
AppCompatRadioButton
|
CheckBox
|
AppCompatCheckBox
|
AutoCompleteTextView
|
AppCompatAutoCompleteTextView
|
MultiAutoCompleteTextView
|
AppCompatMultiAutoCompleteTextView
|
Aggiungere visualizzazioni personalizzate per app senza AppCompat
Se la tua app non utilizza AppCompat, utilizza gli helper di integrazione delle visualizzazioni nel modulo emoji2-views-helper progettati per l'utilizzo nelle visualizzazioni personalizzate. Questi sono gli helper che la libreria AppCompat utilizza per implementare il supporto delle emoji.
Completa i seguenti passaggi per supportare le visualizzazioni personalizzate per le app che non utilizzano
AppCompat.
Aggiungi la libreria
emoji2-views-helper:implementation "androidx.emoji2:emoji2-views-helper:$emojiVersion"Segui le istruzioni per includere
EmojiTextViewHelperoEmojiEditTextHelpernelle visualizzazioni personalizzate della tua app.Testa l'integrazione avviando l'app su un dispositivo con Android 10 o versioni precedenti e visualizzando la seguente stringa di test. Assicurati che tutti i caratteri vengano visualizzati correttamente.
- 16.0: , , 🇨🇶
- 15.1: 🐦🔥, 🧑🧑🧒🧒, 👩🏽🦽➡️, 🇲🇶
- 15.0: 🩷, 🫸🏼, 🐦⬛
- 14.0: 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1: 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0: 🥲, 🥷🏿, 🐻❄️
- 12.1: 🧑🏻🦰, 🧑🏿🦯, 👩🏻🤝👩🏼
- 12.0: 🦩, 🦻🏿, 👩🏼🤝👩🏻
Funzionalità facoltative per la gestione di emoji2
Dopo aver incluso la libreria emoji2 nella tua app, puoi aggiungere le funzionalità opzionali descritte in questa sezione.
Configurare emoji2 per utilizzare un carattere diverso o un provider di caratteri scaricabili
Per configurare emoji2 in modo che utilizzi un carattere diverso o un fornitore di caratteri scaricabili, segui questi passaggi:
Disattiva
EmojiCompatInitializeraggiungendo quanto segue al manifest:<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>Effettua una delle seguenti operazioni:
Utilizza la configurazione predefinita chiamando
DefaultEmojiCompatConfiguration.create(context).Crea la tua configurazione per caricare i caratteri da un'altra origine utilizzando
EmojiCompat.Config. Questa classe offre diverse opzioni per modificare il comportamento diEmojiCompat, come descritto nella sezione seguente.
Modificare il comportamento di EmojiCompat
Puoi utilizzare un'istanza di EmojiCompat.Config per modificare il comportamento di EmojiCompat.
L'opzione di configurazione più importante è
setMetadataLoadStrategy(),
che controlla quando EmojiCompat carica il carattere. Il caricamento dei caratteri inizia non appena viene chiamato EmojiCompat.load() e questo attiva i download necessari. Il sistema crea un thread per il download dei caratteri, a meno che non ne venga fornito uno dall'app.
LOAD_STRATEGY_MANUAL ti consente di controllare quando viene chiamato EmojiCompat.load() e
LOAD_STRATEGY_DEFAULT
fa sì che il caricamento inizi in modo sincrono nella chiamata a
EmojiCompat.init().
La maggior parte delle app utilizza LOAD_STRATEGY_MANUAL per controllare il thread e la tempistica
del caricamento dei caratteri. La tua app deve posticipare l'operazione fino alla visualizzazione della prima schermata per
evitare di introdurre latenza di avvio. EmojiCompatInitializer segue questa
pratica e posticipa il caricamento del carattere emoji fino a quando non viene ripristinata la prima schermata.
Utilizza i seguenti metodi della classe base per impostare altri aspetti della configurazione:
setReplaceAll(): determina seEmojiCompatsostituisce tutte le emoji che trova con istanze diEmojiSpan. Per impostazione predefinita, quandoEmojiCompatdeduce che il sistema può visualizzare un'emoji, non la sostituisce. Se impostata sutrue,EmojiCompatsostituisce tutte le emoji con oggettiEmojiSpan.setEmojiSpanIndicatorEnabled(): indica seEmojiCompatsostituisce un'emoji con un oggettoEmojiSpan. Se impostato sutrue,EmojiCompatdisegna uno sfondo perEmojiSpan. Questo metodo viene utilizzato principalmente a scopo di debug.setEmojiSpanIndicatorColor: imposta il colore per indicare unEmojiSpan. Il valore predefinito èGREEN.registerInitCallback(): informa un'app sullo stato dell'inizializzazione diEmojiCompat.
Aggiungi listener di inizializzazione
Le classi EmojiCompat e EmojiCompat.Config forniscono i metodi
registerInitCallback()
e
unregisterInitCallback()
per registrare e annullare la registrazione dei callback di inizializzazione. La tua app utilizza questi
callback per attendere l'inizializzazione di EmojiCompat prima di elaborare le emoji su
un thread in background o in una visualizzazione personalizzata.
Per utilizzare questi metodi, crea un'istanza della classe
EmojiCompat.InitCallback. Chiama questi metodi e passa l'istanza della classe EmojiCompat.InitCallback. Quando l'inizializzazione ha esito positivo, la classe
EmojiCompat chiama il metodo
onInitialized(). Se l'inizializzazione della libreria non va a buon fine, la classe EmojiCompat chiama il metodo
onFailed().
Per controllare lo stato di inizializzazione in qualsiasi momento, chiama il metodo
getLoadState(). Questo metodo restituisce uno dei seguenti valori:
LOAD_STATE_LOADING,
LOAD_STATE_SUCCEEDED,
o
LOAD_STATE_FAILED.
Supportare i caratteri in bundle con emoji2
Puoi utilizzare l'artefatto emoji2-bundled per raggruppare un carattere emoji nella tua app.
Tuttavia, poiché il carattere NotoColorEmoji supera i 10 MB, ti consigliamo vivamente
di utilizzare i caratteri scaricabili quando possibile. L'artefatto
emoji2-bundled è destinato alle app sui dispositivi che non supportano
i caratteri scaricabili.
Per utilizzare l'artefatto emoji2-bundled:
Includi gli artefatti
emoji2-bundledeemoji2:implementation "androidx.emoji2:emoji2:$emojiVersion" implementation "androidx.emoji2:emoji2-bundled:$emojiVersion"Configura
emoji2per utilizzare la configurazione in bundle:Kotlin
EmojiCompat.init(BundledEmojiCompatConfig(context))
Java
EmojiCompat.init(new BundledEmojiCompatConfig(context));
Testa l'integrazione seguendo i passaggi precedenti per includere
emojicompatcon o senzaAppCompat. Assicurati che la stringa di test venga visualizzata correttamente.- 16.0: , , 🇨🇶
- 15.1: 🐦🔥, 🧑🧑🧒🧒, 👩🏽🦽➡️, 🇲🇶
- 15.0: 🩷, 🫸🏼, 🐦⬛
- 14.0: 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1: 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0: 🥲, 🥷🏿, 🐻❄️
- 12.1: 🧑🏻🦰, 🧑🏿🦯, 👩🏻🤝👩🏼
- 12.0: 🦩, 🦻🏿, 👩🏼🤝👩🏻
Impatto della configurazione automatica di EmojiCompat
Il sistema applica la configurazione predefinita utilizzando la libreria di avvio,
EmojiCompatInitializer e
DefaultEmojiCompatConfig.
Dopo la ripresa della prima attività nell'app, l'inizializzatore pianifica il caricamento del carattere emoji. Questo breve ritardo consente all'app di visualizzare i contenuti iniziali senza alcuna potenziale latenza dovuta al caricamento dei caratteri in un thread in background.
DefaultEmojiCompatConfig cerca un fornitore di caratteri scaricabili installato nel sistema
che implementa l'interfaccia EmojiCompat, ad esempio i servizi
Google Play. Sui dispositivi con Google Play Services, il carattere viene caricato utilizzando
Google Play Services.
L'inizializzatore crea un thread in background per caricare il carattere emoji e il download del carattere può richiedere fino a 10 secondi prima del timeout. Dopo il download del carattere, sono necessari circa 150 millisecondi su un thread in background per inizializzare EmojiCompat.
Rimanda l'inizializzazione di EmojiCompat, anche se disattivi
EmojiCompatInitializer. Se configuri manualmente
EmojiCompat, chiama EmojiCompat.load() dopo che viene visualizzata
la prima schermata dell'app per evitare conflitti in background con il caricamento della prima
schermata.
Dopo il caricamento, EmojiCompat utilizza circa 300 KB di RAM per contenere i metadati delle emoji.