Il set standard di emoji viene aggiornato ogni anno il Unicode, con l'aumento dell'utilizzo delle emoji rapidamente per tutti i tipi di app.
Se la tua app mostra contenuti internet o fornisce input di testo, ti consigliamo vivamente consigliamo di supportare gli ultimi caratteri delle emoji. In caso contrario, le emoji successive potrebbero visualizzato come un piccolo riquadro quadrato chiamato tofu (☐) o altro testo visualizzato in modo errato sequenze di emoji.
Le versioni Android 11 (livello API 30) e precedenti non possono aggiornare il carattere delle emoji, quindi le app che le visualizzano in queste versioni devono essere aggiornate manualmente.
Di seguito sono riportati alcuni esempi di emoji moderne.
Esempi | Versione |
---|---|
🫠 🫱🏼🫲🏿 🫰🏽 | 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 compatibilità con le versioni precedenti più semplice
con versioni precedenti di Android. La libreria emoji2
è una dipendenza del
libreria AppCompat
e non richiede
un'ulteriore configurazione.
Supporto delle emoji in Compose
BOM marzo 2023 (Compose UI 1.4) introduce il supporto per le ultime emoji. all'ultima versione, inclusa la compatibilità con le versioni precedenti di Android API 21. In questa pagina viene spiegato come configurare le emoji moderne nel sistema di visualizzazione. Consulta la pagina Emoji in Scrivi per ulteriori informazioni.
Prerequisiti
Per verificare che la tua app mostri correttamente le emoji più recenti, avviala su un dispositivo con Android 10 (livello API 29) o versioni precedenti. Questa pagina include emoji moderne che possono essere mostrati a scopo di test.
Usa AppCompat per supportare le ultime emoji
AppCompat
1.4 include il supporto delle emoji.
Per usare AppCompat
a supporto delle emoji, procedi nel seguente modo:
Verifica che il modulo dipende dalla versione della libreria
AppCompat
1.4.0-alpha01 o in alto.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
AppCompatActivity
.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 inferiore e che mostrerà la seguente stringa di test. Assicurati che tutti i caratteri vengono visualizzati correttamente.
- 14.0: 🫠, 🫱🏼 🫲🏿, 🫰🏽
- 13.1: ⬤ 🌫️, 🧔🏻 ♀️, 🧑🏿 ❤️ 🧑🏾
- 13.0: 🥲, 🥷🏿, 🔒 Ч️
- 12.1: 🧑🏻 🦰, 🧑🏿 🦯, 👩🏻 🤝 👩🏼
- 12.0: 🦩, 🦻🏿, 👩🏼 🤝 👩🏻
La tua app mostra automaticamente emoji compatibili con le versioni precedenti su tutti i dispositivi che
fornire un fornitore di caratteri scaricabili compatibile con emoji2
, ad esempio i dispositivi
fornito da Google Play Services.
Se la tua app utilizza AppCompat, ma mostra tofu (☐)
In alcuni casi, l'app potrebbe mostrare tofu anziché l'emoji corretta, anche se
aggiungi la libreria AppCompat
. Di seguito sono riportate alcune possibili spiegazioni
soluzioni.
Stai eseguendo l'app su un dispositivo flash di recente o un nuovo emulatore
Cancella i dati di Google Play Services dell'app per cancellare eventuali caratteri di memorizzazione nella cache avvengono durante l'avvio. In genere questa operazione risolve il problema dopo alcune ore.
Per cancellare i dati dell'app, svolgi i seguenti passaggi:
Apri Impostazioni sul 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 correlata al testo
Ciò può verificarsi se non estendi AppCompatActivity
o se crei un'istanza di un
visualizza nel codice, ad esempio TextView
. Controlla quanto segue.
- L'attività si estende per
AppCompatActivity
. - Se crei la visualizzazione nel codice, utilizza il tipo di oggetto
AppCompat
corretto sottoclasse.
AppCompatActivity
gonfia automaticamente AppCompatTextView
al posto di
TextView
quando si gonfiano i file XML, in modo da non doverli aggiornare.
Il telefono di prova non supporta i caratteri scaricabili
Verifica che DefaultEmojiCompatConfig.create
restituisca una configurazione non null.
Un emulatore in un livello API precedente non ha eseguito l'upgrade di Google Play Services
Quando utilizzi un emulatore in 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 version
Verifica che il valore
versionCode
sia superiore a211200000
.
Supporta emoji senza AppCompat
Se la tua app non può includere AppCompat
, può usare direttamente emoji2
. Questo
richiede più lavoro, quindi utilizza questo metodo solo se la tua app non può usare AppCompat
.
Per supportare le emoji senza la raccolta AppCompat
:
Nel file
build.gradle
dell'app, includiemoji2
eemoji2-views
.build.gradle def emojiVersion = "1.0.0-alpha03" implementation "androidx.emoji2:emoji2:$emojiVersion" implementation "androidx.emoji2:emoji2-views:$emojiVersion"
Il modulo
emoji2-views
fornisce sottoclassi diTextView
,Button
eEditText
che implementanoEmojiCompat
Non utilizzarlo in un'app che includeAppCompat
, perché implementa giàEmojiCompat
.In XML e codice, ovunque usi
TextView
,EditText
oButton
: utilizzaEmojiTextView
,EmojiEditText
oppureEmojiButton
.activity_main.xml <androidx.emoji2.widget.EmojiTextView ... /> <androidx.emoji2.widget.EmojiEditText ... /> <androidx.emoji2.widget.EmojiButton ... />
Se includi il modulo
emoji2
, il sistema utilizza il file scaricabile predefinito del fornitore di caratteri per caricare il carattere delle emoji automaticamente poco dopo l'avvio dell'app. No è necessaria un'ulteriore configurazione.Per testare l'integrazione, avvia l'app su un dispositivo con Android 11 oppure e con le seguenti stringhe di test. Assicurati che tutti i caratteri vengono visualizzati correttamente.
- 14.0: 🫠, 🫱🏼 🫲🏿, 🫰🏽
- 13.1: ⬤ 🌫️, 🧔🏻 ♀️, 🧑🏿 ❤️ 🧑🏾
- 13.0: 🥲, 🥷🏿, 🔒 Ч️
- 12.1: 🧑🏻 🦰, 🧑🏿 🦯, 👩🏻 🤝 👩🏼
- 12.0: 🦩, 🦻🏿, 👩🏼 🤝 👩🏻
Utilizzare EmojiCompat senza widget
EmojiCompat
utilizza EmojiSpan
per
il rendering delle immagini corrette. Pertanto, deve convertire qualsiasi dato
CharSequence
in un
Oggetto Spanned
con EmojiSpan
oggetti.
La classe EmojiCompat fornisce il metodo process()
per convertire CharSequences
in Spanned
istanze. Con questo metodo, puoi chiamare process()
nel
in background e memorizzare nella cache i risultati per migliorare le prestazioni dell'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 inserimento
La classe EmojiCompat
consente alle tastiere di visualizzare l'emoji supportata dall'app
con cui stanno interagendo. Editor dei metodi di immissione
(IME) possono utilizzare
getEmojiMatch()
:
per verificare se un'istanza di EmojiCompat
è in grado di eseguire il rendering di un
emoji. Questo metodo richiede un valore 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 stabilire quale emoji visualizzare nella tavolozza. Per verificare la versione, se
disponibile, la tastiera può cercare i seguenti tasti nella
EditorInfo.extras
gruppo:
EDITOR_INFO_METAVERSION_KEY
: rappresenta la versione dei metadati delle emoji utilizzate dall'app. Se questo token non esiste, l'app non sta usandoEmojiCompat
.EDITOR_INFO_REPLACE_ALL_KEY
: Se la chiave esiste ed è impostata sutrue
, l'app configuraEmojiCompat
per sostituire tutte le emoji, anche se 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 viste possono mostrare i contenuti generati dagli utenti
devono implementare
EmojiCompat
La procedura varia a seconda che la tua app utilizzi o meno la raccolta AppCompat
.
Aggiungi 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
Estendi le visualizzazioni in AppCompat
:
Invece di estenderla... | Estendi |
---|---|
TextView
|
AppCompatTextView
|
EditText
|
AppCompatEditText
|
ToggleButton
|
AppCompatToggleButton
|
Switch
|
SwitchCompat
|
Button
|
AppCompatButton
|
CheckedTextView
|
AppCompatCheckedTextView
|
RadioButton
|
AppCompatRadioButton
|
CheckBox
|
AppCompatCheckBox
|
AutoCompleteTextView
|
AppCompatAutoCompleteTextView
|
MultiAutoCompleteTextView
|
AppCompatMultiAutoCompleteTextView
|
Aggiungi visualizzazioni personalizzate per le app senza AppCompat
Se la tua app non utilizza AppCompat
, usa gli aiutanti di integrazione delle visualizzazioni nella
modulo emoji2-views-helper
progettato per essere utilizzato nelle visualizzazioni personalizzate. Questi
sono gli assistenti utilizzati dalla libreria AppCompat
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
EmojiTextViewHelper
oEmojiEditTextHelper
nelle visualizzazioni personalizzate della tua app.Testa l'integrazione avviando l'app su un dispositivo con Android 10 o inferiore e che mostrerà la seguente stringa di test. Assicurati che tutti i caratteri vengono visualizzati correttamente.
- 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 l'elemento facoltativo
descritte in questa sezione.
Configura emoji2 per utilizzare un carattere diverso o un fornitore di caratteri scaricabile
Per configurare emoji2
in modo che utilizzi un carattere diverso o un fornitore di caratteri scaricabile, procedi nel seguente modo:
le seguenti:
Disattiva il
EmojiCompatInitializer
aggiungendo al file manifest quanto segue:<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 caratteri da un'altra origine utilizzando
EmojiCompat.Config
Questo corso offre diverse opzioni per modificareEmojiCompat
come descritto nella sezione che segue.
Modifica il comportamento di EmojiCompat
Puoi utilizzare un'istanza di EmojiCompat.Config
per modificare EmojiCompat
comportamento degli utenti.
L'opzione di configurazione più importante è
setMetadataLoadStrategy()
,
che controlla quando EmojiCompat
carica il carattere. Il caricamento del carattere inizia non appena
Viene chiamato EmojiCompat.load()
e questo attiva i download necessari. La
crea un thread per il download dei caratteri, a meno che la tua app non ne fornisca uno.
LOAD_STRATEGY_MANUAL
ti consente di controllare quando chiamare EmojiCompat.load()
e
LOAD_STRATEGY_DEFAULT
:
consente di avviare il caricamento in modo sincrono nella chiamata a
EmojiCompat.init()
.
La maggior parte delle app usa LOAD_STRATEGY_MANUAL
per poter controllare thread e tempistiche
del caricamento del carattere. L'app deve rimandare fino a quando non viene visualizzata la prima schermata per
evitare di introdurre la latenza di avvio. EmojiCompatInitializer
segue questa pagina
esercitati e ti consente di rimandare il caricamento del carattere dell'emoji fino al riavvio della prima schermata.
Utilizza i seguenti metodi della classe base per impostare altri aspetti del configurazione:
setReplaceAll()
: determina seEmojiCompat
sostituisce tutte le emoji che trova con istanze diEmojiSpan
. Per impostazione predefinita, quandoEmojiCompat
deduce che il sistema può visualizzare un'emoji, questa non sostituisce l'emoji. Se impostato sutrue
,EmojiCompat
sostituisce tutte le emoji conEmojiSpan
oggetti.setEmojiSpanIndicatorEnabled()
: indica seEmojiCompat
sostituisce un'emoji con unEmojiSpan
. Se impostato sutrue
,EmojiCompat
disegna uno sfondo perEmojiSpan
. Questo metodo viene utilizzato principalmente per scopi 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
I corsi EmojiCompat
e EmojiCompat.Config
offrono
registerInitCallback()
:
e
unregisterInitCallback()
per registrare e annullare la registrazione dei callback di inizializzazione. La tua app utilizza questi
di attendere l'inizializzazione di EmojiCompat
prima di elaborare le emoji
in un thread in background o in una visualizzazione personalizzata.
Per utilizzare questi metodi, crea un'istanza del metodo
EmojiCompat.InitCallback
. Richiama questi metodi e passa all'istanza del metodo
EmojiCompat.InitCallback
corso. Se l'inizializzazione va a buon fine,
La classe EmojiCompat
chiama
onInitialized()
. Se la libreria non viene inizializzata, la classe EmojiCompat
chiama la classe
onFailed()
.
Per controllare lo stato di inizializzazione in qualsiasi momento, richiama il metodo
getLoadState()
. Questo metodo restituisce uno dei seguenti valori:
LOAD_STATE_LOADING
,
LOAD_STATE_SUCCEEDED
,
o
LOAD_STATE_FAILED
Supporto dei caratteri raggruppati con emoji2
Puoi utilizzare l'elemento emoji2-bundled
per raggruppare un carattere emoji nella tua app.
Tuttavia, poiché il carattere NotoColorEmoji
supera i 10 MB,
ti consigliamo di utilizzare i caratteri scaricabili per la tua app, se possibile. La
emoji2-bundled
elemento è destinato alle app su dispositivi che non supportano
caratteri scaricabili.
Per utilizzare l'artefatto emoji2-bundled
:
Includi elementi
emoji2-bundled
eemoji2
:implementation "androidx.emoji2:emoji2:$emojiVersion" implementation "androidx.emoji2:emoji2-bundled:$emojiVersion"
Configura
emoji2
per 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
emojicompat
con o senzaAppCompat
. Assicurati che la stringa di test vengono visualizzati correttamente.- 14.0: 🫠, 🫱🏼 🫲🏿, 🫰🏽
- 13.1: ⬤ 🌫️, 🧔🏻 ♀️, 🧑🏿 ❤️ 🧑🏾
- 13.0: 🥲, 🥷🏿, 🔒 Ч️
- 12.1: 🧑🏻 🦰, 🧑🏿 🦯, 👩🏻 🤝 👩🏼
- 12.0: 🦩, 🦻🏿, 👩🏼 🤝 👩🏻
Impatto della configurazione automatica EmojiCompat
Il sistema applica la configurazione predefinita utilizzando la libreria di avvio,
EmojiCompatInitializer
e
DefaultEmojiCompatConfig
Dopo che la prima attività è ripresa nell'app, l'inizializzatore pianifica le emoji caricamento del tipo di carattere. Questo breve ritardo consente alla tua app di mostrare i contenuti iniziali senza eventuali latenze potenziali dovute al caricamento dei caratteri in un thread in background.
DefaultEmojiCompatConfig
cerca un carattere scaricabile installato dal sistema
che implementa l'interfaccia EmojiCompat
, ad esempio Google Play
i servizi di machine learning. Sui dispositivi con Google Play Services, viene caricato il carattere utilizzando
Google Play Services.
L'inizializzatore crea un thread di sfondo per caricare il carattere e il carattere dell'emoji
il download può richiedere fino a 10 secondi prima del timeout. Dopo che il carattere è
scaricato, sono necessari circa 150 millisecondi su un thread in background
inizializza EmojiCompat
.
Rimanda l'inizializzazione di EmojiCompat
, anche se disabiliti
EmojiCompatInitializer
. Se configuri manualmente
EmojiCompat
, chiama EmojiCompat.load()
dopo averlo visualizzato
la prima schermata dell'app per evitare conflitti in background con la prima
caricamento della schermata.
Dopo il caricamento, EmojiCompat
utilizza circa 300 kB di RAM per contenere l'emoji
metadati.