Unicode actualiza anualmente el conjunto de emojis estándar, ya que su uso aumenta rápidamente en todo tipo de apps.
Si tu app muestra contenido de Internet o proporciona entrada de texto, te recomendamos encarecidamente que admitas las fuentes de emojis más recientes. De lo contrario, los emojis posteriores podrían mostrarse como un cuadrado pequeño llamado tofu (☐) o como otras secuencias de emojis renderizadas de manera incorrecta.
Las versiones de Android 11 (nivel de API 30) y versiones anteriores no pueden actualizar la fuente de emojis, por lo que las apps que los muestran en esas versiones deben actualizarse manualmente.
Los siguientes son ejemplos de emojis modernos.
Ejemplos | Versión |
---|---|
🫠 🫱🏼🫲🏿 🫰🏽 | 14.0 (septiembre de 2021) |
😶🌫️ 🧔🏻♀️ 🧑🏿❤️🧑🏾 | 13.1 (septiembre de 2020) |
🥲 🥷🏿 🐻❄️ | 13.0 (marzo de 2020) |
🧑🏻🦰 🧑🏿🦯 👩🏻🤝👩🏼 | 12.1 (octubre de 2019) |
🦩 🦻🏿 👩🏼🤝👩🏻 | 12.0 (febrero de 2019) |
BoM de marzo de 2023 (IU de Compose 1.4) compatible con los emojis más recientes versión, incluida la retrocompatibilidad con versiones anteriores de Android, hasta el nivel de API 21.
Esta compatibilidad no requiere cambios en tu app si usas Text
y
TextField
(Material 2 o Material 3) o BasicText
BasicTextField
, obtendrás compatibilidad con emojis modernos lista para usarse.
La mejor manera de probar los emojis más recientes en tu app es usar un dispositivo real con el nivel de API 30 o versiones anteriores.
Si usas una solución de emojis personalizada o quieres inhabilitar el emoji predeterminado
resolución en Compose por cualquier otro motivo, puedes usar
PlatformTextStyle(emojiSupportMatch)
:
Text( text = "Hello $EMOJI_TEXT", style = TextStyle( platformStyle = PlatformTextStyle( emojiSupportMatch = EmojiSupportMatch.None )/* ... */ ) )
Interoperabilidad
Si tu app usa Views y Compose en el mismo Activity
, asegúrate de usar las APIs adecuadas para configurar los emojis correctamente. Lo siguiente
se describe cuándo usar cada API.
Se extenderá desde ComponentActivity
Si tu Activity
se extiende de Compose ComponentActivity
en lugar de
AppCompatActivity
, sigue el artículo Admitir emojis sin AppCompat
instrucciones.
Como no vas a extender AppCompatActivity
, agrega el Emoji2.
biblioteca a tus dependencias y usa EmojiTextView
en tus vistas
en lugar del widget TextView
, como se muestra en el siguiente fragmento:
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 } } } }
Luego, en tu archivo en formato XML, haz lo siguiente:
<androidx.emoji2.widget.EmojiTextView android:id="@+id/emoji_text_view" android:layout_width="match_parent" android:layout_height="wrap_content" />
Se extenderá desde AppCompatActivity
Si tu Activity
se extiende desde AppCompatActivity
, puedes usar ComposeView
para llamar a funciones de componibilidad. Los emojis se renderizan correctamente en
Versiones de Android cuando usas elementos de texto componibles
Si vas a extender desde AppCompatActivity
, aumenta TextView
desde XML
para que los emojis se rendericen correctamente.
Esto se aplica si aumentas el XML:
- fuera de
ComposeView
, enActivity
. Observa el uso deAppCompatActivity
yTextView
en el siguiente fragmento:
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
, a través de la vinculación de vistas conAndroidViewBinding
, como en el siguiente fragmento:
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 aumentar un texto con AndroidView
dentro de ComposeView
, usa AppCompatTextView
para renderizar los emojis de forma correcta:
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 } ) } } } ) } }
Consulta la documentación de las APIs de Interoperabilidad para obtener más detalles.
Solución de problemas
Si ves tofu (☐) en lugar del emoji, primero verifica si el problema es tu dispositivo de prueba específico. Estos son algunos de los aspectos principales que puedes revisar:
- Es posible que estés usando un dispositivo que se actualizó recientemente en la memoria flash o un emulador nuevo. Si posible, prueba con otro dispositivo de prueba real que uses con frecuencia y en el que accedas tu Cuenta de Google. Recuerda que el nivel de API debería ser 30 o inferior para garantizar emojis funcionen en las versiones correctas.
- El teléfono de prueba no admite fuentes descargables.
- Verifica la versión correcta de los Servicios de Google Play.
Recomendaciones para ti
- Nota: El texto del vínculo se muestra cuando JavaScript está desactivado
- Otras consideraciones
- Texto en Compose
- Desplazamiento