O conjunto padrão de emojis é atualizado anualmente pelo Unicode, já que o uso de emojis está aumentando rapidamente em todos os tipos de apps.
Caso seu app mostre conteúdo da Internet ou ofereça entrada de texto, recomendamos que você ofereça suporte às fontes de emojis mais recentes. Caso contrário, os emojis posteriores poderão ser mostrados como uma pequena caixa quadrada chamada tofu (☐) ou outras sequências de emojis renderizadas incorretamente.
As versões 11 (nível 30 da API) e anteriores do Android não podem atualizar a fonte dos emojis. Portanto, os apps que os 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 BOM de março de 2023 (IU do Compose 1.4) oferece suporte à versão mais recente de emojis, incluindo compatibilidade com versões anteriores do Android até a API 21.
Esse suporte não exige mudanças no seu app. Se você usa Text
e
TextField
(Material 2 ou Material 3) ou BasicText
e
BasicTextField
, recebe suporte imediato para emojis modernos.
A melhor maneira de testar os emojis mais recentes no seu app é usando um dispositivo real com o nível 30 da API ou versões anteriores.
Se você estiver usando uma solução de emojis personalizada ou precisar desativar a resolução
de emojis padrão no Compose por qualquer outro motivo, use
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
, confira
se você está usando as APIs adequadas para configurar emojis corretamente. As seções a seguir descrevem quando usar cada API.
Estendendo de ComponentActivity
Se a Activity
for estendida do Compose ComponentActivity
em vez de
AppCompatActivity
, siga as instruções de Suporte a emojis sem a AppCompat.
Como você não está estendendo AppCompatActivity
, adicione a biblioteca
Emoji2 às dependências e use EmojiTextView
nas visualizações
em vez do widget TextView
, conforme mostrado no snippet abaixo:
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
Se o Activity
se estender de AppCompatActivity
, você poderá usar
ComposeView
para chamar funções combináveis. Os emojis são renderizados corretamente nas
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 snippet a seguir:
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
, por meio da vinculação de visualizações usandoAndroidViewBinding
, como no snippet abaixo:
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 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 usar outro dispositivo de teste real que você usa com frequência e que esteja conectado à sua Conta do Google. Lembre-se de que a API precisa ser de 30 ou menos para garantir que os emojis funcionem 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