El conjunto estándar de emojis se actualiza anualmente Unicode, a medida que aumenta el uso de emojis rápidamente para todo tipo de apps.
Si tu aplicación muestra contenido de Internet o proporciona entrada de texto, recomendamos que y te recomendamos que admitas las fuentes de emojis más recientes. De lo contrario, los emojis posteriores podrían Se muestra como un pequeño cuadro cuadrado llamado tofu (☐) o algún otro cuadro renderizado de forma incorrecta. secuencias de emojis.
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) |
La biblioteca androidx.emoji2:emoji2
proporciona una retrocompatibilidad más simple con versiones anteriores de Android. La biblioteca emoji2
es una dependencia de la
AppCompat
y no requiere
configuración adicional para funcionar.
Compatibilidad con emojis en Compose
BoM de marzo de 2023 (IU de Compose 1.4) compatible con los emojis más recientes incluida la retrocompatibilidad con versiones anteriores de Android, hasta API 21. En esta página, se explica cómo configurar emojis modernos en el sistema de View. Consulta la página Emojis en Compose para obtener más información.
Requisitos previos
Para confirmar que la app muestre correctamente los emojis más recientes, iníciala en un dispositivo con Android 10 (nivel de API 29) o una versión anterior. En esta página, se incluyen emojis modernos que puede mostrar para realizar pruebas.
Usa AppCompat para admitir los emojis más recientes
AppCompat
1.4 incluye compatibilidad con emojis.
Si deseas usar AppCompat
para admitir emojis, haz lo siguiente:
Verifica que tu módulo dependa de la versión 1.4.0-alpha01 o una posterior de la biblioteca
AppCompat
.build.gradle // Ensure version is 1.4.0-alpha01 or higher. implementation "androidx.appcompat:appcompat.$appcompatVersion"
Asegúrate de que todas las actividades que muestren texto extiendan la clase
AppCompatActivity
.Kotlin
MyActivity.kt class MyActivity: AppCompatActivity { ... }
Java
MyActivity.java class MyActivity extends AppCompatActivity { ... }
Inicia tu app en un dispositivo que ejecute Android 10 para probar tu integración o una inferior, y se muestra la siguiente cadena de prueba. Asegúrate de que todos los caracteres se renderizan correctamente.
- 14.0: 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1: 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0: 🥲, 🥷🏿, 🐻❄️
- 12.1: 🧑🏻🦰, 🧑🏿🦯, 👩🏻🤝👩🏼
- 12.0: 🦩, 🦻🏿, 👩🏼🤝👩🏻
Tu app muestra automáticamente emojis retrocompatibles en todos los dispositivos que
Proporcionar un proveedor de fuentes descargables que sea compatible con emoji2
, como dispositivos
con la tecnología de los Servicios de Google Play.
Si tu app usa AppCompat, pero muestra tofu (☐)
En algunos casos, es posible que tu app muestre tofu en lugar del emoji adecuado, incluso si
agregas la biblioteca AppCompat
. A continuación, se incluyen
explicaciones posibles y
de Google Cloud.
Estás ejecutando la app en un dispositivo actualizado recientemente o en un emulador nuevo.
Borra los datos de los Servicios de Google Play de la app para eliminar el almacenamiento en caché de fuentes que puedan se produzcan durante el inicio. Esto suele resolver el problema después de unas horas.
Para borrar los datos de app, haz lo siguiente:
Abre Configuración en tu dispositivo Android.
Presiona Apps y notificaciones.
Presiona Ver todas las apps o Información de las apps.
Desplázate por las apps y presiona Servicios de Google Play.
Presiona Almacenamiento y caché.
Presiona Borrar caché.
Tu app no usa una clase relacionada con texto de AppCompat
Esto puede suceder si no extiendes AppCompatActivity
o si creas una instancia de una
en código, como TextView
. Comprueba lo siguiente:
- La actividad extiende
AppCompatActivity
. - Si creas la vista en código, usa el
AppCompat
correcto subclase.
AppCompatActivity
aumenta automáticamente AppCompatTextView
en lugar de TextView
cuando se aumenta el XML, de modo que no necesitas actualizar el XML.
El teléfono de prueba no admite fuentes descargables
Verifica que DefaultEmojiCompatConfig.create
muestre una configuración no nula.
Un emulador en un nivel de API anterior no actualizó los Servicios de Google Play.
Si usas un emulador en un nivel de API anterior, es posible que debas actualizar el
Servicios de Google Play empaquetados para emoji2
para encontrar el proveedor de fuentes Para ello,
accede a Google Play Store en el emulador.
Para verificar que haya una versión compatible instalada, haz lo siguiente:
Ejecuta el siguiente comando:
adb shell dumpsys package com.google.android.gms | grep version
Verifica que el
versionCode
sea mayor que211200000
.
Cómo admitir emojis sin AppCompat
Si tu app no puede incluir AppCompat
, puede usar emoji2
directamente. Esta
requiere más trabajo, por lo que solo debes usar este método si tu app no puede usar AppCompat
.
Para admitir emojis sin la biblioteca AppCompat
, haz lo siguiente:
En el archivo
build.gradle
de tu app, incluyeemoji2
yemoji2-views
.build.gradle def emojiVersion = "1.0.0-alpha03" implementation "androidx.emoji2:emoji2:$emojiVersion" implementation "androidx.emoji2:emoji2-views:$emojiVersion"
El módulo
emoji2-views
proporciona subclases deTextView
,Button
yEditText
que implementanEmojiCompat
No utilizarlo en una app que incluyeAppCompat
, porque ya implementaEmojiCompat
En XML y código, siempre que uses
TextView
,EditText
oButton
: usarEmojiTextView
,EmojiEditText
oEmojiButton
en su lugar.activity_main.xml <androidx.emoji2.widget.EmojiTextView ... /> <androidx.emoji2.widget.EmojiEditText ... /> <androidx.emoji2.widget.EmojiButton ... />
Si incluyes el módulo
emoji2
, el sistema usará el módulo descargable predeterminado el proveedor de fuentes para cargar la fuente de emojis automáticamente poco después del inicio de la app. No si se necesita configuración adicional.Para probar tu integración, inicia tu app en un dispositivo que ejecute Android 11 o inferior y se muestran las siguientes cadenas de prueba. Asegúrate de que todos los caracteres se renderizan correctamente.
- 14.0: 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1: 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0: 🥲, 🥷🏿, 🐻❄️
- 12.1: 🧑🏻🦰, 🧑🏿🦯, 👩🏻🤝👩🏼
- 12.0: 🦩, 🦻🏿, 👩🏼🤝👩🏻
Cómo usar EmojiCompat sin widgets
EmojiCompat
usa EmojiSpan
para lo siguiente:
renderizar las imágenes correctas. Por lo tanto, tiene que convertir cualquier
CharSequence
en una
Un objeto Spanned
con objetos EmojiSpan
.
La clase EmojiCompat proporciona el método process()
para convertir CharSequences
en instancias de Spanned
. Con este método, puedes llamar a process()
en la
en segundo plano y almacena en caché los resultados, lo que mejora el rendimiento de tu app.
Kotlin
val processed = EmojiCompat.get().process("neutral face \uD83D\uDE10")
Java
CharSequence processed = EmojiCompat.get().process("neutral face \uD83D\uDE10");
Cómo usar EmojiCompat para editores de métodos de entrada
La clase EmojiCompat
permite que los teclados rendericen los emojis compatibles con la app.
con las que están interactuando. Editores de métodos de entrada
(IME) pueden usar el
getEmojiMatch()
para comprobar si una instancia de EmojiCompat
puede renderizar un
emoji. Este método toma un objeto CharSequence
de un emoji y muestra true
si EmojiCompat
puede detectarlo y renderizarlo.
El teclado también puede consultar la versión de EmojiCompat
que admite la app para determinar qué emojis debe renderizar en la paleta. Para ello, si está disponible, el teclado puede buscar las siguientes claves en el paquete EditorInfo.extras
:
EDITOR_INFO_METAVERSION_KEY
: representa la versión de los metadatos de emojis que usa la app. Si esta clave no existe, la app no usaEmojiCompat
.EDITOR_INFO_REPLACE_ALL_KEY
: si la clave existe y está configurada entrue
, la app configuraEmojiCompat
para reemplazar todos los emojis, incluso si están presentes en el sistema
Obtén más información para configurar una instancia de EmojiCompat.
Cómo usar emojis en vistas personalizadas
Si tu app tiene vistas personalizadas que
subclases directas o indirectas de TextView
, por ejemplo, Button
,
Switch
o EditText
, y esas vistas pueden mostrar imágenes
cada uno debe implementar
EmojiCompat
El proceso varía si tu app usa la biblioteca AppCompat
o no.
Cómo agregar vistas personalizadas para apps con AppCompat
Si tu app usa AppCompat
, extiende la implementación de AppCompat
en lugar de
la implementación de la plataforma. Usa la siguiente tabla como guía para saber lo siguiente:
ampliar tus vistas en AppCompat
:
En lugar de extender… | Extiende |
---|---|
TextView
|
AppCompatTextView
|
EditText
|
AppCompatEditText
|
ToggleButton
|
AppCompatToggleButton
|
Switch
|
SwitchCompat
|
Button
|
AppCompatButton
|
CheckedTextView
|
AppCompatCheckedTextView
|
RadioButton
|
AppCompatRadioButton
|
CheckBox
|
AppCompatCheckBox
|
AutoCompleteTextView
|
AppCompatAutoCompleteTextView
|
MultiAutoCompleteTextView
|
AppCompatMultiAutoCompleteTextView
|
Cómo agregar vistas personalizadas para apps sin AppCompat
Si tu app no usa AppCompat
, agrega los asistentes de integración de vistas en el módulo emoji2-views-helper
que están diseñados para usarse en vistas personalizadas. Estos son los asistentes que usa la biblioteca AppCompat
para implementar la compatibilidad con emojis.
Completa los siguientes pasos a fin de admitir vistas personalizadas en apps que no usen AppCompat
.
Agrega la biblioteca
emoji2-views-helper
:implementation "androidx.emoji2:emoji2-views-helper:$emojiVersion"
Sigue las instrucciones para incluir
EmojiTextViewHelper
oEmojiEditTextHelper
en las vistas personalizadas de tu app.Inicia tu app en un dispositivo que ejecute Android 10 para probar tu integración o una inferior, y se muestra la siguiente cadena de prueba. Asegúrate de que todos los caracteres se renderizan correctamente.
- 14.0: 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1: 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0: 🥲, 🥷🏿, 🐻❄️
- 12.1: 🧑🏻🦰, 🧑🏿🦯, 👩🏻🤝👩🏼
- 12.0: 🦩, 🦻🏿, 👩🏼🤝👩🏻
Funciones opcionales para controlar los emojis2
Después de incluir la biblioteca emoji2
en tu app, puedes agregar el elemento
y las funciones que se describen en esta sección.
Cómo configurar emoji2 para usar una fuente o un proveedor de fuentes descargables diferentes
A fin de configurar emoji2
para usar una fuente o un proveedor de fuentes descargables diferentes, haz lo siguiente:
Inhabilitar el
EmojiCompatInitializer
Para ello, agrega lo siguiente a tu manifiesto:<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>
Realiza alguna de las siguientes acciones:
Usa la configuración predeterminada llamando
DefaultEmojiCompatConfiguration.create(context)
Crea tu propia configuración para cargar fuentes de otra fuente mediante
EmojiCompat.Config
. Esta clase proporciona varias opciones para modificar tuEmojiCompat
. de tu aplicación, como se describe en la siguiente sección.
Cómo modificar el comportamiento de tu EmojiCompat
Puedes usar una instancia de EmojiCompat.Config
para modificar EmojiCompat
.
el comportamiento de los usuarios.
La opción de configuración más importante es setMetadataLoadStrategy()
, que controla cuándo EmojiCompat
carga la fuente. La carga de fuentes comienza en cuanto
Se llama a EmojiCompat.load()
, lo que activa las descargas necesarias. El
crea un subproceso para descargar fuentes, a menos que tu app proporcione uno.
LOAD_STRATEGY_MANUAL
te permite controlar cuándo se llama a EmojiCompat.load()
.
LOAD_STRATEGY_DEFAULT
hace que la carga se inicie de forma síncrona en la llamada a
EmojiCompat.init()
.
La mayoría de las apps usan LOAD_STRATEGY_MANUAL
para que puedan controlar el subproceso y el tiempo.
de la carga de fuentes. Tu app debe postergar hasta después de que aparezca la primera pantalla para
evitar la latencia de inicio. EmojiCompatInitializer
sigue a esta
practicar y aplazar la carga de la fuente de emojis hasta que se reanude la primera pantalla.
Usa los siguientes métodos de la clase base para establecer otros aspectos de la actual:
setReplaceAll()
: Determina siEmojiCompat
reemplaza todos los emojis que encuentra con instancias. deEmojiSpan
. De forma predeterminada, cuandoEmojiCompat
infiere que el sistema puede renderiza un emoji, no lo reemplaza. Cuando se establece entrue
,EmojiCompat
reemplaza todos los emojis con objetosEmojiSpan
.setEmojiSpanIndicatorEnabled()
: indica siEmojiCompat
reemplaza un emoji conEmojiSpan
. Cuando se establece entrue
,EmojiCompat
dibuja un fondo paraEmojiSpan
. Este método se utiliza principalmente para fines de depuración.setEmojiSpanIndicatorColor
: establece el color para indicar unaEmojiSpan
. El valor predeterminado esGREEN
registerInitCallback()
: Informa a una app sobre el estado de la inicialización deEmojiCompat
.
Cómo agregar objetos de escucha de inicialización
Las clases EmojiCompat
y EmojiCompat.Config
proporcionan la
registerInitCallback()
y
unregisterInitCallback()
para registrar y cancelar el registro de devoluciones de llamada de inicialización. Tu app usa estos
devoluciones de llamada para esperar hasta que se inicialice EmojiCompat
antes de procesar los emojis en
en un subproceso en segundo plano
o en una vista personalizada.
A fin de usar estos métodos, crea una instancia de la clase EmojiCompat.InitCallback
. Llama a estos métodos y pasa la instancia de la clase EmojiCompat.InitCallback
. Cuando la inicialización se completa de forma correcta, la clase EmojiCompat
llama al método onInitialized()
. Si la biblioteca no se inicializa, la clase EmojiCompat
llama a
onFailed()
.
Para comprobar el estado de inicialización en cualquier momento, llama al
getLoadState()
. Este método muestra uno de los siguientes valores:
LOAD_STATE_LOADING
:
LOAD_STATE_SUCCEEDED
,
o
LOAD_STATE_FAILED
Cómo admitir fuentes empaquetadas con emojis2
Puedes usar el artefacto emoji2-bundled
para empaquetar una fuente de emojis en tu app.
Sin embargo, como la fuente NotoColorEmoji
supera los 10 MB, recomendamos
recomendar que tu app use fuentes descargables siempre que sea posible. El
El artefacto emoji2-bundled
está diseñado para apps de dispositivos que no son compatibles
fuentes descargables.
Para usar el artefacto emoji2-bundled
, haz lo siguiente:
Incluye los artefactos
emoji2-bundled
yemoji2
:implementation "androidx.emoji2:emoji2:$emojiVersion" implementation "androidx.emoji2:emoji2-bundled:$emojiVersion"
Configura
emoji2
para usar la configuración incluida en los paquetes:Kotlin
EmojiCompat.init(BundledEmojiCompatConfig(context))
Java
EmojiCompat.init(new BundledEmojiCompatConfig(context));
Sigue los pasos anteriores para probar la integración
emojicompat
con o sinAppCompat
. Asegúrate de que la cadena de prueba se muestre correctamente.- 14.0: 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1: 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0: 🥲, 🥷🏿, 🐻❄️
- 12.1: 🧑🏻🦰, 🧑🏿🦯, 👩🏻🤝👩🏼
- 12.0: 🦩, 🦻🏿, 👩🏼🤝👩🏻
Impacto de la configuración automática de EmojiCompat
El sistema aplica la configuración predeterminada usando la biblioteca de inicio,
EmojiCompatInitializer
y
DefaultEmojiCompatConfig
Después de que se reanuda la primera actividad en tu app, el inicializador programa los emojis cargando la fuente. Esta breve demora permite que tu app muestre su contenido inicial sin Cualquier latencia potencial debido a la carga de fuentes en un subproceso en segundo plano
DefaultEmojiCompatConfig
busca una fuente descargable instalada por el sistema
que implementa la interfaz EmojiCompat
, como Google Play
de Google Cloud. En dispositivos con los Servicios de Google Play, la fuente se carga usando esa tecnología.
El inicializador crea un subproceso en segundo plano para cargar la fuente y la fuente de los emojis
la descarga puede tardar hasta 10 segundos antes de que se agote el tiempo de espera. Después de descargar la fuente, un subproceso en segundo plano tarda unos 150 milisegundos en inicializar EmojiCompat
.
Difiere la inicialización de EmojiCompat
, incluso si inhabilitas EmojiCompatInitializer
. Si configuras manualmente
EmojiCompat
, llama a EmojiCompat.load()
después de que aparezca.
la primera pantalla de tu aplicación para evitar conflictos en segundo plano con la primera
cargar la pantalla.
Después de la carga, EmojiCompat
usa alrededor de 300 KB de RAM para contener el emoji.
metadatos.