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) |
BOM, março de 2023 (Compose UI 1.4) oferece suporte para os emojis mais recentes versão, incluindo a compatibilidade com versões anteriores do Android à API 21.
Esse suporte não exige mudanças no app. Se você usa Text
e
TextField
(Material 2 ou Material 3) ou BasicText
e
BasicTextField
, você tem acesso a emojis modernos prontos para uso.
A melhor maneira de testar os emojis mais recentes no seu app é usando em um dispositivo real com o nível 30 da API ou anterior.
Se você estiver usando uma solução de emojis personalizada ou precisar desativar o emoji padrão
resolução no Compose por qualquer outro motivo, você pode usar
PlatformTextStyle(emojiSupportMatch)
:
Text( text = "Hello $EMOJI_TEXT", style = TextStyle( platformStyle = PlatformTextStyle( emojiSupportMatch = EmojiSupportMatch.None )/* ... */ ) )
Interoperabilidade
Caso seu app use visualizações e o Compose no mesmo Activity
, verifique se você
estão usando as APIs adequadas para configurar os emojis corretamente. O seguinte
as seções descrevem quando usar cada API.
Estendendo de ComponentActivity
Se o Activity
for estendido do Compose ComponentActivity
em vez de
AppCompatActivity
, siga as instruções em Oferecer suporte a emojis sem a AppCompat.
instruções.
Como você não está estendendo AppCompatActivity
, adicione o Emoji2
biblioteca às dependências e usar EmojiTextView
nas visualizações.
em vez do widget TextView
, como mostrado no snippet a seguir:
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 } } } }
Em seguida, no seu arquivo XML:
<androidx.emoji2.widget.EmojiTextView android:id="@+id/emoji_text_view" android:layout_width="match_parent" android:layout_height="wrap_content" />
Estendendo de AppCompatActivity
Caso seu Activity
se estenda de AppCompatActivity
, será possível usar
ComposeView
para chamar funções combináveis. Emojis são renderizados corretamente
Versões do Android quando você usa elementos combináveis de texto.
Se você estiver estendendo de AppCompatActivity
, infle TextView
do XML
para que os emojis
sejam renderizados corretamente.
Isso se aplica se você estiver inflando o XML:
- fora de
ComposeView
, emActivity
. Observe o uso deAppCompatActivity
eTextView
no seguinte snippet:
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 } } } }
- dentro de
ComposeView
pela vinculação de visualizações usandoAndroidViewBinding
, como no seguinte snippet:
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 } } } } ) } }
Para inflar um texto com AndroidView
dentro de ComposeView
, use
AppCompatTextView
para renderizar os emojis corretamente:
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 } ) } } } ) } }
Consulte a documentação das APIs de interoperabilidade para mais detalhes.
Solução de problemas
Se você estiver vendo tofu (☐) em vez do emoji, verifique primeiro se o problema é no seu dispositivo de teste específico. Há alguns itens principais que podem ser verificados:
- Talvez você esteja usando um dispositivo atualizado recentemente ou um novo emulador. Se possível, tente outro dispositivo de teste real que você use com frequência e que esteja conectado à sua conta sua Conta do Google. Lembre-se de que a API deve ser 30 ou menos para garantir os emojis funcionam nas versões corretas.
- O smartphone de teste não tem suporte para fontes para download.
- Verifique a versão correta do Google Play Services.
Recomendados para você
- Observação: o texto do link aparece quando o JavaScript está desativado.
- Outras considerações
- Texto no Compose
- Rolagem