La raccolta di assistenza di EmojiCompat
mira a
mantenere i dispositivi Android aggiornati con le ultime emoji. Impedisce alla tua app
non mostri emoji mancanti sotto forma di ☐, che
indica che il dispositivo non ha un carattere per visualizzare il testo. Di
usando la libreria di supporto EmojiCompat
.
gli utenti dell'app non devono attendere gli aggiornamenti del sistema operativo Android per ricevere la versione più recente
emoji.
![Dispositivi che mostrano emoji](https://developer.android.com/static/guide/topics/ui/images/look-and-feel/emoji-compat/emoji-comparison.png?authuser=0000&hl=it)
Consulta le seguenti risorse correlate:
Come funziona EmojiCompat?
La libreria di assistenza EmojiCompat
offre
per implementare il supporto di emoji compatibili con le versioni precedenti sui dispositivi
Android 4.4 (livello API 19) e versioni successive. Puoi configurare
EmojiCompat
con bundle o
caratteri scaricabili. Per saperne di più sulla configurazione, consulta
sezioni seguenti:
EmojiCompat
identifica l'emoji per un determinato
CharSequence
, lo sostituisce con
EmojiSpans
, se necessario, e
esegue il rendering dei glifi delle emoji. La figura 2 illustra il processo.
![Procedura EmojiCompat](https://developer.android.com/static/guide/topics/ui/images/look-and-feel/emoji-compat/architecture.png?authuser=0000&hl=it)
Configurazione dei caratteri scaricabili
La configurazione dei caratteri scaricabili utilizza il supporto per i caratteri scaricabili
funzionalità della raccolta per scaricare un carattere delle emoji. Inoltre, aggiorna le
metadati delle emoji che EmojiCompat
la libreria di supporto deve stare al passo con le versioni più recenti dell'Unicode
e la specifica del prodotto.
Aggiunta della dipendenza dalla libreria di supporto
Per utilizzare la libreria di assistenza EmojiCompat
:
devi modificare le dipendenze classpath del progetto dell'app all'interno
di sviluppo software.
Per aggiungere una libreria di supporto al progetto dell'applicazione:
- Apri il file
build.gradle
della tua applicazione. - Aggiungi la libreria di supporto alla sezione
dependencies
.
Alla moda
dependencies { ... implementation "androidx.emoji:emoji:28.0.0" }
Kotlin
dependencies { ... implementation("androidx.emoji:emoji:28.0.0") }
Inizializzazione del carattere scaricabile configurazione
Devi inizializzare EmojiCompat
in
caricare i metadati e il carattere tipografico. Poiché l'inizializzazione può richiedere del tempo,
il processo di inizializzazione viene eseguito su un thread in background.
Per inizializzare EmojiCompat
con
configurazione del carattere scaricabile, procedi nel seguente modo:
- Crea un'istanza di
FontRequest
e specifica l'autorità del provider del font, il pacchetto del provider del font, la query sul carattere e un elenco di set di hash per il certificato. Per ulteriori informazioni informazioni suFontRequest
, consulta alle Utilizzo programmatico dei caratteri scaricabili nella sezione Caratteri scaricabili documentazione. - Crea un'istanza di
FontRequestEmojiCompatConfig
e fornisce le istanze diContext
eFontRequest
. - Inizializza
EmojiCompat
chiamando il metodoinit()
e passiamo l'istanzaFontRequestEmojiCompatConfig
. - Usa i widget
EmojiCompat
nel layout XML. Se utilizziAppCompat
, consulta le Utilizzare i widget EmojiCompat con AppCompat .
Kotlin
class MyApplication : Application() { override fun onCreate() { super.onCreate() val fontRequest = FontRequest( "com.example.fontprovider", "com.example", "emoji compat Font Query", CERTIFICATES ) val config = FontRequestEmojiCompatConfig(this, fontRequest) EmojiCompat.init(config) } }
Java
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); FontRequest fontRequest = new FontRequest( "com.example.fontprovider", "com.example", "emoji compat Font Query", CERTIFICATES); EmojiCompat.Config config = new FontRequestEmojiCompatConfig(this, fontRequest); EmojiCompat.init(config); } }
<android.support.text.emoji.widget.EmojiTextView android:layout_width="wrap_content" android:layout_height="wrap_content"/> <android.support.text.emoji.widget.EmojiEditText android:layout_width="wrap_content" android:layout_height="wrap_content"/> <android.support.text.emoji.widget.EmojiButton android:layout_width="wrap_content" android:layout_height="wrap_content"/>
Per ulteriori informazioni su come configurare
EmojiCompat
con il carattere scaricabile
configurazione, vai all'app di esempio Compatibilità di emoji
Java
| Kotlin.
Componenti della libreria
![Componenti della Raccolta nella procedura EmojiCompat](https://developer.android.com/static/guide/topics/ui/images/look-and-feel/emoji-compat/basic-components.png?authuser=0000&hl=it)
- .
- Widget:
EmojiEditText
,EmojiTextView
,EmojiButton
- Implementazioni predefinite del widget da usare
EmojiCompat
conTextView
,EditText
eButton
. EmojiCompat
- Piattaforma pubblica principale per la libreria di supporto. Esegue tutte le chiamate esterne e si coordina con le altre parti del sistema.
EmojiCompat.Config
- Configura l'istanza singleton da creare.
EmojiSpan
- Una sottoclasse
ReplacementSpan
che sostituisce (sequenze) e restituisce il glifo. - Carattere
EmojiCompat
EmojiCompat
utilizza un carattere per visualizzare emoji. Questo carattere è una versione modificata del Carattere Android Emoji. Il carattere viene modificato nel seguente modo:- Per garantire la compatibilità con le versioni precedenti del rendering delle emoji, tutte le emoji sono rappresentati da un singolo punto di codice Unicode Supplemental Private Use Area-A di Unicode che inizia con U+F0001.
-
Ulteriori metadati delle emoji vengono inseriti in formato binario nel carattere e
viene analizzato in fase di runtime
EmojiCompat
. I dati sono incorporati nella tabellameta
del carattere, con il tag privato Emji.
Opzioni di configurazione
Puoi utilizzare l'istanza EmojiCompat
per
modifica il comportamento di EmojiCompat
. Puoi utilizzare
utilizza i seguenti metodi dalla classe base per impostare la configurazione:
setReplaceAll()
: Determina seEmojiCompat
deve sostituisci tutte le emoji che trova conEmojiSpans
. Per impostazione predefinita,EmojiCompat
fa del suo meglio per capire se il sistema può eseguire il rendering di un'emoji e non le sostituisce emoji. Se impostato sutrue
,EmojiCompat
sostituisce tutte le emoji che trova conEmojiSpans
.setEmojiSpanIndicatorEnabled()
: indica seEmojiCompat
ha sostituito un'emoji con unEmojiSpan
. Se impostato sutrue
,EmojiCompat
disegna uno sfondo perEmojiSpan
. Questo metodo è utilizzato principalmente per il debug.setEmojiSpanIndicatorColor()
: Imposta il colore per indicare unEmojiSpan
. Il valore predefinito èGREEN
.registerInitCallback
: Informa l'app sullo stato del Inizializzazione diEmojiCompat
.
Kotlin
val config = FontRequestEmojiCompatConfig(...) .setReplaceAll(true) .setEmojiSpanIndicatorEnabled(true) .setEmojiSpanIndicatorColor(Color.GREEN) .registerInitCallback(object: EmojiCompat.InitCallback() { ... })
Java
EmojiCompat.Config config = new FontRequestEmojiCompatConfig(...) .setReplaceAll(true) .setEmojiSpanIndicatorEnabled(true) .setEmojiSpanIndicatorColor(Color.GREEN) .registerInitCallback(new InitCallback() {...})
Aggiunta di listener di inizializzazione
EmojiCompat
e
EmojiCompat
corso
fornire
registerInitCallback()
e
unregisterInitCallback()
per registrare un callback di inizializzazione. Per utilizzare questi metodi, crea
un'istanza
EmojiCompat.InitCallback
corso. Chiama
questi metodi e passare l'istanza
EmojiCompat.InitCallback
corso. Quando
inizializzazione del supporto EmojiCompat
che ha successo, EmojiCompat
chiama
onInitialized()
. Se la libreria
non viene inizializzato, EmojiCompat
chiama
onFailed()
.
Per controllare lo stato di inizializzazione in qualsiasi momento, richiama il metodo
getLoadState()
. Restituisce uno dei seguenti valori:
LOAD_STATE_LOADING
,
LOAD_STATE_SUCCEEDED
,
o LOAD_STATE_FAILED
.
Utilizzare EmojiCompat con i widget AppCompat
Se utilizzi AppCompat widgets
,
possono usare EmojiCompat
widget che estendono
da AppCompat widgets
.
- Aggiungi la libreria di supporto alla sezione delle dipendenze.
Alla moda
dependencies { ... implementation "androidx.emoji:emoji-bundled:$version" }
Kotlin
dependencies { implementation("androidx.emoji:emoji-appcompat:$version") }
Alla moda
dependencies { implementation "androidx.emoji:emoji-appcompat:$version" }
- Usa
EmojiCompat
WidgetAppCompat Widget
nel layout XML.
<android.support.text.emoji.widget.EmojiAppCompatTextView android:layout_width="wrap_content" android:layout_height="wrap_content"/> <android.support.text.emoji.widget.EmojiAppCompatEditText android:layout_width="wrap_content" android:layout_height="wrap_content"/> <android.support.text.emoji.widget.EmojiAppCompatButton android:layout_width="wrap_content" android:layout_height="wrap_content"/>
Configurazione dei caratteri in bundle
È disponibile anche la libreria di assistenza EmojiCompat
disponibili in una versione integrata dei caratteri. Questo pacchetto include il font con
metadati incorporati. Il pacchetto include anche
BundledEmojiCompatConfig
che utilizza AssetManager
per caricare i metadati
e i caratteri.
Nota: le dimensioni del carattere possono essere megabyte.
Aggiunta della dipendenza dalla libreria di supporto
Per utilizzare la libreria di assistenza EmojiCompat
con la configurazione dei caratteri in bundle, devi modificare il codice
delle dipendenze classpath nell'ambiente di sviluppo.
Per aggiungere una libreria di supporto al progetto dell'applicazione:
- Apri il file
build.gradle
della tua applicazione. - Aggiungi la libreria di supporto alla sezione
dependencies
.
Alla moda
dependencies { ... implementation "androidx.emoji:emoji:28.0.0" }
Kotlin
dependencies { ... implementation("androidx.emoji:emoji:28.0.0") }
Utilizzare i caratteri raggruppati per configurare EmojiCompat
Per utilizzare i caratteri combinati per configurare
EmojiCompat
, segui questi passaggi:
- Usa
BundledEmojiCompatConfig
per creare un'istanza diEmojiCompat
e fornire un'istanza diContext
. - Chiama il
init()
di inizializzazioneEmojiCompat
e passiamo l'istanzaBundledEmojiCompatConfig
.
Kotlin
class MyApplication : Application() { override fun onCreate() { super.onCreate() val config = BundledEmojiCompatConfig(this) EmojiCompat.init(config) } }
Java
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); EmojiCompat.Config config = new BundledEmojiCompatConfig(this); EmojiCompat.init(config); ... } }
Utilizzare EmojiCompat senza widget
EmojiCompat
usi
EmojiSpan
per eseguire il rendering delle immagini corrette.
Di conseguenza, deve convertire ogni dato CharSequence
in
Spanned
istanze con
EmojiSpans
. La
La classe EmojiCompat
fornisce un metodo per
converti CharSequences
in
Spanned
istanze con
EmojiSpans
. Utilizzando questo metodo,
puoi elaborare e memorizzare nella cache le istanze elaborate anziché la stringa non elaborata,
migliorando così le prestazioni della tua applicazione.
Kotlin
val processed = EmojiCompat.get().process("neutral face \uD83D\uDE10")
Java
CharSequence processed = EmojiCompat.get().process("neutral face \uD83D\uDE10");
Utilizzo di EmojiCompat per gli IME
Tramite la libreria di assistenza di EmojiCompat
,
le tastiere possono mostrare l'emoji supportata dall'applicazione che stanno
a interagire con loro. Gli IME possono utilizzare
hasEmojiGlyph()
per verificare se EmojiCompat
è in grado
di rendering di un'emoji. Questo metodo richiede un valore CharSequence
un'emoji e restituisce true
se
EmojiCompat
può rilevare e visualizzare
emoji.
La tastiera può anche controllare la versione
EmojiCompat
supporta la raccolta che l'app
consente di stabilire quali emoji visualizzare nella tavolozza. Per controllare
dell'app, se disponibile, la tastiera deve controllare se quanto segue
esistono
EditorInfo.extras
gruppo:
EDITOR_INFO_METAVERSION_KEY
EDITOR_INFO_REPLACE_ALL_KEY
Se la chiave esiste nel bundle, il valore rappresenta il valore
dei metadati delle emoji utilizzati dall'app. Se questa chiave non
esiste, l'app non usa EmojiCompat
.
Se la chiave esiste ed è impostata su true
, questo indica che
l'app ha chiamato
SetReplaceAll()
. Per ulteriori informazioni
Configurazione di EmojiCompat
,
consulta la sezione Opzioni di configurazione
.
Dopo aver ricevuto i tasti nella
EditorInfo.extras
cofanetto,
la tastiera può utilizzare
hasEmojiGlyph()
dove metadataVersion
è il valore per
EDITOR_INFO_METAVERSION_KEY
,
per verificare se l'app può visualizzare un'emoji specifica.
Utilizzare EmojiCompat con widget personalizzati
Puoi sempre usare l'process()
per pre-elaborare CharSequence
nella tua app e aggiungere
a qualsiasi widget in grado di eseguire il rendering di istanze Spanned
; della
esempio, TextView
. Inoltre,
EmojiCompat
fornisce il seguente widget
per arricchire i tuoi widget personalizzati con il supporto delle emoji
il minimo sforzo.
- Visualizzazione di testo di esempio
- EditText di esempio
Kotlin
class MyTextView(context: Context) : AppCompatTextView(context) { private val emojiTextViewHelper: EmojiTextViewHelper by lazy(LazyThreadSafetyMode.NONE) { EmojiTextViewHelper(this).apply { updateTransformationMethod() } } override fun setFilters(filters: Array<InputFilter>) { super.setFilters(emojiTextViewHelper.getFilters(filters)) } override fun setAllCaps(allCaps: Boolean) { super.setAllCaps(allCaps) emojiTextViewHelper.setAllCaps(allCaps) } }
Java
public class MyTextView extends AppCompatTextView { ... public MyTextView(Context context) { super(context); init(); } ... private void init() { getEmojiTextViewHelper().updateTransformationMethod(); } @Override public void setFilters(InputFilter[] filters) { super.setFilters(getEmojiTextViewHelper().getFilters(filters)); } @Override public void setAllCaps(boolean allCaps) { super.setAllCaps(allCaps); getEmojiTextViewHelper().setAllCaps(allCaps); } private EmojiTextViewHelper getEmojiTextViewHelper() { ... } }
Kotlin
class MyEditText(context: Context) : AppCompatEditText(context) { private val emojiEditTextHelper: EmojiEditTextHelper by lazy(LazyThreadSafetyMode.NONE) { EmojiEditTextHelper(this).also { super.setKeyListener(it.getKeyListener(keyListener)) } } override fun setKeyListener(input: KeyListener?) { input?.also { super.setKeyListener(emojiEditTextHelper.getKeyListener(it)) } } override fun onCreateInputConnection(outAttrs: EditorInfo): InputConnection { val inputConnection: InputConnection = super.onCreateInputConnection(outAttrs) return emojiEditTextHelper.onCreateInputConnection( inputConnection, outAttrs ) as InputConnection } }
Java
public class MyEditText extends AppCompatEditText { ... public MyEditText(Context context) { super(context); init(); } ... private void init() { super.setKeyListener(getEmojiEditTextHelper().getKeyListener(getKeyListener())); } @Override public void setKeyListener(android.text.method.KeyListener keyListener) { super.setKeyListener(getEmojiEditTextHelper().getKeyListener(keyListener)); } @Override public InputConnection onCreateInputConnection(EditorInfo outAttrs) { InputConnection inputConnection = super.onCreateInputConnection(outAttrs); return getEmojiEditTextHelper().onCreateInputConnection(inputConnection, outAttrs); } private EmojiEditTextHelper getEmojiEditTextHelper() { ... } }
Domande frequenti
- Come si avvia il download del carattere?
- Quanto tempo richiede l'inizializzazione? .
- Quanta memoria supporta la libreria EmojiCompat?
- Posso utilizzare EmojiCompat per una visualizzazione di testo personalizzata?
- Cosa succede se aggiungo widget nei file XML di layout su dispositivi che vengono eseguiti su Android 4.4 (livello API 19) o versioni precedenti?
I caratteri emoji vengono scaricati alla prima richiesta, se non esistono sul dispositivo. La pianificazione dei download è trasparente per l'app.
Dopo aver scaricato il carattere, sono necessari circa 150 millisecondi
per inizializzare EmojiCompat
.
Al momento, la struttura dei dati per trovare l'emoji è caricata nell'app memoria e utilizza circa 200 kB.
Sì. EmojiCompat fornisce classi di supporto per widget personalizzati. È inoltre possibile
possibile pre-elaborare una determinata stringa e convertirla in
Spanned
. Per ulteriori informazioni sull'helper per i widget
consulta le
Utilizzare EmojiCompat con i widget personalizzati
.
Puoi includere EmojiCompat
supportano la libreria o i relativi widget nelle applicazioni che supportano i dispositivi
con Android 4.4 (livello API 19) o versioni precedenti. Tuttavia, se un dispositivo esegue
su una versione di Android precedente al livello API 19,
EmojiCompat
e i suoi widget si trovano in un
"nessuna operazione" stato. Ciò significa che
Il comportamento di EmojiTextView
è esatto
come un normale TextView
.
EmojiCompat
istanza; immediatamente
entra in un
LOAD_STATE_SUCCEEDED
lo stato desiderato quando richiami
init()
.
Risorse aggiuntive
Per ulteriori informazioni sull'uso del
EmojiCompat
nella raccolta, guarda EmojiCompat.