O conjunto padrão de emojis é atualizado anualmente por Unicode, já que o uso de emojis está aumentando rapidamente em todos os tipos de aplicativos.
Caso seu aplicativo exiba conteúdo da Internet ou forneça uma entrada de texto, recomendamos recomendamos que você ofereça suporte às fontes de emojis mais recentes. Caso contrário, os emojis mais tarde podem ser exibido como um pequeno quadrado chamado tofu (☐) ou outro elemento renderizado incorretamente sequências de emojis.
As versões 11 (nível 30 da API) e anteriores do Android não podem atualizar a fonte dos emojis. Por isso, e apps que as exibem nessas versões precisam ser atualizados manualmente.
Confira a seguir exemplos de emojis modernos.
Exemplos | Versão |
---|---|
🫠 🫱🏼🫲🏿 🫰🏽 | 14.0 (setembro de 2021) |
😶🌫️ 🧔🏻♀️ 🧑🏿❤️🧑🏾 | 13.1 (setembro de 2020) |
🥲 🥷🏿 🐻❄️ | 13.0 (março de 2020) |
🧑🏻🦰 🧑🏿🦯 👩🏻🤝👩🏼 | 12.1 (outubro de 2019) |
🦩 🦻🏿 👩🏼🤝👩🏻 | 12.0 (fevereiro de 2019) |
A biblioteca androidx.emoji2:emoji2
fornece compatibilidade mais simples
com versões anteriores do Android. A biblioteca emoji2
é uma dependência da
AppCompat
e não exige nenhum
e outras configurações funcionem.
Suporte a emojis no Compose
BOM, março de 2023 (Compose UI 1.4) oferece suporte para os emojis mais recentes. incluindo a compatibilidade com versões anteriores do Android API 21. Esta página mostra como configurar emojis modernos no sistema de visualização. Consulte a página Emojis no Compose para mais informações.
Pré-requisitos
Abra o app em um dispositivo para confirmar se ele está mostrando corretamente os novos emojis. com o Android 10 (nível 29 da API) ou uma versão anterior. Esta página inclui emojis modernos que você que podem ser exibidos para testes.
Usar a AppCompat para oferecer suporte aos emojis mais recentes
O AppCompat
1.4 inclui suporte para emojis.
Para usar AppCompat
para oferecer suporte a emojis, faça o seguinte:
Confira se o módulo depende da biblioteca
AppCompat
versão 1.4.0-alpha01 ou mais recente.build.gradle // Ensure version is 1.4.0-alpha01 or higher. implementation "androidx.appcompat:appcompat.$appcompatVersion"
Garanta que todas as atividades que mostram texto estendam a classe
AppCompatActivity
.Kotlin
MyActivity.kt class MyActivity: AppCompatActivity { ... }
Java
MyActivity.java class MyActivity extends AppCompatActivity { ... }
Teste a integração iniciando o app em um dispositivo com Android 10 ou inferior e exibindo a seguinte string de teste. Certifique-se de que todos os caracteres sejam renderizados corretamente.
- 14.0: 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1: 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0: 🥲, 🥷🏿, 🐻❄️
- 12.1: 🧑🏻🦰, 🧑🏿🦯, 👩🏻🤝👩🏼
- 12.0: 🦩, 🦻🏿, 👩🏼🤝👩🏻
Seu app mostra automaticamente emojis compatíveis com versões anteriores em todos os dispositivos que
fornecer um provedor de fontes para download compatível com emoji2
, como dispositivos
com a tecnologia do Google Play Services.
Se o app usa a AppCompat, mas mostra um tofu (☐)
Em alguns casos, o app pode exibir tofu em vez do emoji adequado, mesmo se
adicione a biblioteca AppCompat
. Veja a seguir as possíveis explicações e
soluções.
Você está executando o app em um dispositivo atualizado recentemente ou em um novo emulador.
Limpe os dados do Google Play Services do app para limpar o armazenamento em cache de fontes que possa ocorrer durante a inicialização. Geralmente, isso resolve o problema em algumas horas.
Para limpar os dados do app, faça o seguinte:
Abra as Configurações no seu dispositivo Android.
Toque em Apps e notificações.
Toque em Mostrar todos os apps ou em Informações do app.
Role pelos apps e toque em Google Play Services.
Toque em Armazenamento e cache.
Toque em Limpar cache.
Seu app não está usando uma classe da AppCompat relacionada a texto
Isso pode acontecer se você não estender AppCompatActivity
ou se instanciar um
no código, como TextView
. Verifique o seguinte:
- A atividade precisa estender a
AppCompatActivity
. - Se estiver criando a visualização em código, use a
AppCompat
correta subclasse.
Ao inflar o XML, a AppCompatActivity
infla a AppCompatTextView
automaticamente em vez da
TextView
, então você não precisa atualizar o XML.
O smartphone de teste não tem suporte a fontes para download
Verifique se DefaultEmojiCompatConfig.create
retorna uma configuração não nula.
Um emulador em um nível de API anterior não fez upgrade do Google Play Services
Ao usar um emulador em um nível de API anterior, pode ser necessário atualizar o
Google Play Services incluído no pacote de emoji2
para encontrar o provedor da fonte. Para isso,
fazer login na Google Play Store no emulador.
Para verificar se uma versão compatível está instalada, faça o seguinte:
Execute este comando:
adb shell dumpsys package com.google.android.gms | grep version
Confira se o
versionCode
é maior que211200000
.
Oferecer suporte a emojis sem a AppCompat
Se o app não puder incluir AppCompat
, ele poderá usar emoji2
diretamente. Isso
exige mais trabalho. Portanto, só use esse método se o app não puder usar AppCompat
.
Para oferecer suporte a emojis sem a biblioteca AppCompat
, faça o seguinte:
No arquivo
build.gradle
do seu app, incluaemoji2
eemoji2-views
.build.gradle def emojiVersion = "1.0.0-alpha03" implementation "androidx.emoji2:emoji2:$emojiVersion" implementation "androidx.emoji2:emoji2-views:$emojiVersion"
O módulo
emoji2-views
fornece subclasses deTextView
,Button
eEditText
que implementamEmojiCompat
. Não usar em um app que incluiAppCompat
, porque ele já implementaEmojiCompat
.em XML e código, onde quer que você use
TextView
,EditText
ouButton
—useEmojiTextView
,EmojiEditText
ouEmojiButton
.activity_main.xml <androidx.emoji2.widget.EmojiTextView ... /> <androidx.emoji2.widget.EmojiEditText ... /> <androidx.emoji2.widget.EmojiButton ... />
Ao incluir o módulo
emoji2
, o sistema usa o padrão para download provedor de fontes para carregar a fonte dos emojis automaticamente logo após a inicialização do app. Não outras configurações são necessárias.Para testar a integração, inicie o app em um dispositivo com o Android 11 ou e exibindo as seguintes strings de teste. Certifique-se de que todos os caracteres sejam renderizados corretamente.
- 14.0: 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1: 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0: 🥲, 🥷🏿, 🐻❄️
- 12.1: 🧑🏻🦰, 🧑🏿🦯, 👩🏻🤝👩🏼
- 12.0: 🦩, 🦻🏿, 👩🏼🤝👩🏻
Usar a EmojiCompat sem widgets
EmojiCompat
usa EmojiSpan
para
para renderizar imagens corretas. Portanto, ele precisa converter
objeto CharSequence
em um
Objeto Spanned
com objetos EmojiSpan
.
A classe EmojiCompat oferece o método process()
para converter CharSequences
em instâncias de Spanned
. Com esse método, você pode chamar process()
na
em segundo plano e armazenar em cache os resultados, o que melhora o desempenho do aplicativo.
Kotlin
val processed = EmojiCompat.get().process("neutral face \uD83D\uDE10")
Java
CharSequence processed = EmojiCompat.get().process("neutral face \uD83D\uDE10");
Usar a EmojiCompat para editores de método de entrada
A classe EmojiCompat
permite que os teclados renderizem os emojis com suporte do app.
com que estão interagindo. Editores de métodos de entrada
(IMEs) podem usar
getEmojiMatch()
para verificar se uma instância de EmojiCompat
é capaz de renderizar uma
emoji. Esse método recebe um objeto CharSequence
de um emoji e vai retornar true
se EmojiCompat
puder detectar e renderizar o emoji.
O teclado também pode conferir a versão da EmojiCompat
que é compatível com o app
para determinar qual emoji renderizar na paleta. Para conferir a versão, se
disponível, o teclado pode procurar as seguintes teclas no
pacote
EditorInfo.extras
:
EDITOR_INFO_METAVERSION_KEY
: representa a versão dos metadados de emoji que o app usa. Se essa tecla não existe, o app não está usando aEmojiCompat
.EDITOR_INFO_REPLACE_ALL_KEY
: Se a chave existe e está definida comotrue
, o app configuraEmojiCompat
para substituir todos os emojis, mesmo que estejam presentes no sistema.
Saiba mais sobre como configurar uma instância da EmojiCompat.
Usar emojis em visualizações personalizadas
Caso seu app tenha visualizações personalizadas
subclasses diretas ou indiretas de TextView
, por exemplo, Button
,
Switch
ou EditText
, e essas visualizações podem mostrar
conteúdo, eles precisam implementar
EmojiCompat
.
O processo varia se o app usa ou não a biblioteca AppCompat
.
Adicionar visualizações personalizadas para apps com a AppCompat
Caso seu app use AppCompat
, estenda a implementação de AppCompat
em vez de
a implementação da plataforma. Use a tabela a seguir como um guia
estender suas visualizações em AppCompat
:
Em vez de estender… | Estenda |
---|---|
TextView
|
AppCompatTextView
|
EditText
|
AppCompatEditText
|
ToggleButton
|
AppCompatToggleButton
|
Switch
|
SwitchCompat
|
Button
|
AppCompatButton
|
CheckedTextView
|
AppCompatCheckedTextView
|
RadioButton
|
AppCompatRadioButton
|
CheckBox
|
AppCompatCheckBox
|
AutoCompleteTextView
|
AppCompatAutoCompleteTextView
|
MultiAutoCompleteTextView
|
AppCompatMultiAutoCompleteTextView
|
Adicionar visualizações personalizadas para apps sem a AppCompat
Caso seu app não use a AppCompat
, use os auxiliares de integração de visualização no
módulo emoji2-views-helper
que foram projetados para uso em visualizações personalizadas. Esses
são os auxiliares que a biblioteca AppCompat
usa para implementar o suporte a emojis.
Conclua as etapas a seguir para oferecer suporte a visualizações personalizadas para apps que não usam a
AppCompat
.
Adicione a biblioteca
emoji2-views-helper
:implementation "androidx.emoji2:emoji2-views-helper:$emojiVersion"
Siga as instruções para incluir
EmojiTextViewHelper
ouEmojiEditTextHelper
nas visualizações personalizadas do app.Teste a integração iniciando o app em um dispositivo com Android 10 ou inferior e exibindo a seguinte string de teste. Certifique-se de que todos os caracteres sejam renderizados corretamente.
- 14.0: 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1: 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0: 🥲, 🥷🏿, 🐻❄️
- 12.1: 🧑🏻🦰, 🧑🏿🦯, 👩🏻🤝👩🏼
- 12.0: 🦩, 🦻🏿, 👩🏼🤝👩🏻
Recursos opcionais para lidar com a emoji2
Depois de incluir a biblioteca emoji2
no app, é possível adicionar a biblioteca emoji2
os recursos descritos nesta seção.
Configurar a emoji2 para usar uma fonte ou um provedor de fontes disponíveis para download diferente
Para configurar a emoji2
para usar uma fonte ou um provedor de fontes disponíveis para download diferente, faça o seguinte:
Desative o
EmojiCompatInitializer
adicionando o seguinte ao manifesto:<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>
Siga uma das seguintes ações:
Para usar a configuração padrão, chame
DefaultEmojiCompatConfiguration.create(context)
Crie sua própria configuração para carregar fontes de outra origem usando a
EmojiCompat.Config
. Essa classe oferece várias opções para modificar oEmojiCompat
conforme descrito na seção a seguir.
Modificar o comportamento da EmojiCompat
É possível usar uma instância de EmojiCompat.Config
para modificar EmojiCompat
do seu modelo.
A opção de configuração mais importante é
setMetadataLoadStrategy()
,
que controla quando a EmojiCompat
carrega a fonte. O carregamento de fonte começa assim que
EmojiCompat.load()
é chamado, e isso aciona os downloads necessários. A
o sistema cria uma linha de execução para o download de fontes, a menos que o aplicativo forneça uma.
LOAD_STRATEGY_MANUAL
permite controlar quando EmojiCompat.load()
é chamado, e
LOAD_STRATEGY_DEFAULT
inicia o carregamento de forma síncrona na chamada para
EmojiCompat.init()
.
A maioria dos apps usa LOAD_STRATEGY_MANUAL
para controlar a linha de execução e o tempo
do carregamento de fontes. O app precisa adiar até a primeira tela ser exibida para
evitar introduzir latência de inicialização. EmojiCompatInitializer
segue isto
pratica e adia o carregamento da fonte do emoji até que a primeira tela seja retomada.
Use os seguintes métodos da classe base para definir outros aspectos do configuração:
setReplaceAll()
: determina seEmojiCompat
substitui todos os emojis que encontra por instâncias deEmojiSpan
. Por padrão, quandoEmojiCompat
infere que o sistema pode renderizar um emoji, isso não substitui esse emoji. Quando definido comotrue
, OEmojiCompat
substitui todos os emojis por objetosEmojiSpan
.setEmojiSpanIndicatorEnabled()
: indica seEmojiCompat
substitui um emoji por umaEmojiSpan
. objeto. Quando definido comotrue
,EmojiCompat
desenha um plano de fundo para aEmojiSpan
. Esse método é usado principalmente para fins de depuração.setEmojiSpanIndicatorColor
: define a cor para indicar umEmojiSpan
. O valor padrão éGREEN
registerInitCallback()
: informa um app sobre o estado da inicialização deEmojiCompat
.
Adicionar listeners de inicialização
As classes EmojiCompat
e EmojiCompat.Config
oferecem a
registerInitCallback()
e
unregisterInitCallback()
métodos para registrar e cancelar o registro de callbacks de inicialização. Seu app usa estas
callbacks para aguardar até que EmojiCompat
seja inicializado antes de processar o emoji;
uma linha de execução em segundo plano ou em uma visualização personalizada.
Para usar esses métodos, crie uma instância da
classe
EmojiCompat.InitCallback
. Chame esses métodos e transmita a instância da
classe EmojiCompat.InitCallback
. Quando a inicialização for bem-sucedida, a
classe EmojiCompat
chamará o
método
onInitialized()
. Se a biblioteca não for inicializada, a classe EmojiCompat
vai chamar o método
onFailed()
.
Para verificar o estado de inicialização a qualquer momento, chame o método
getLoadState()
. Esse método retorna um dos seguintes valores:
LOAD_STATE_LOADING
,
LOAD_STATE_SUCCEEDED
,
ou
LOAD_STATE_FAILED
.
Suporte para fontes incluídas na emoji2
Você pode usar o artefato emoji2-bundled
para agrupar uma fonte de emoji no seu app.
No entanto, como a fonte NotoColorEmoji
tem mais de 10 MB, recomendamos fortemente
recomendamos que o app use fontes para download quando possível. A
O artefato emoji2-bundled
é destinado a apps em dispositivos sem suporte
fontes disponíveis para download.
Para usar o artefato emoji2-bundled
, faça o seguinte:
Inclua os artefatos
emoji2-bundled
eemoji2
:implementation "androidx.emoji2:emoji2:$emojiVersion" implementation "androidx.emoji2:emoji2-bundled:$emojiVersion"
Configure
emoji2
para usar a configuração agrupada:Kotlin
EmojiCompat.init(BundledEmojiCompatConfig(context))
Java
EmojiCompat.init(new BundledEmojiCompatConfig(context));
Teste a integração seguindo as etapas anteriores para incluir
emojicompat
com ou semAppCompat
. Confira se a string de teste é exibido corretamente.- 14.0: 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1: 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0: 🥲, 🥷🏿, 🐻❄️
- 12.1: 🧑🏻🦰, 🧑🏿🦯, 👩🏻🤝👩🏼
- 12.0: 🦩, 🦻🏿, 👩🏼🤝👩🏻
Impacto da configuração automática da EmojiCompat
O sistema aplica a configuração padrão usando a biblioteca de inicialização,
EmojiCompatInitializer
e
DefaultEmojiCompatConfig
.
Depois que a primeira atividade é retomada no app, o inicializador programa o emoji. o carregamento da fonte. Esse breve atraso permite que o app exiba o conteúdo inicial sem qualquer possível latência devido ao carregamento de fonte em uma linha de execução em segundo plano.
DefaultEmojiCompatConfig
procura uma fonte para download instalada pelo sistema
provedor que implementa a interface EmojiCompat
, como o Google Play
serviços. Em dispositivos com o Google Play Services, a fonte é carregada usando
esse serviço.
O inicializador cria uma linha de execução em segundo plano para carregar a fonte do emoji e a fonte.
o download pode levar até 10 segundos antes de expirar. Depois do download,
a inicialização da EmojiCompat
leva aproximadamente 150 milissegundos em uma linha de execução em
segundo plano.
Adie a inicialização da EmojiCompat
, mesmo que você desative a
EmojiCompatInitializer
. Se você configurar manualmente
EmojiCompat
, chame EmojiCompat.load()
depois de mostrar
a primeira tela do seu aplicativo para evitar a contenção em segundo plano com a primeira
carregamento da tela.
Após o carregamento, o app EmojiCompat
usa cerca de 300 KB de RAM para armazenar o emoji.
metadados.