Библиотека поддержки EmojiCompat призвана поддерживать актуальность эмодзи на устройствах Android. Она предотвращает отображение отсутствующих символов эмодзи в виде ☐, что указывает на отсутствие подходящего шрифта для отображения текста на вашем устройстве. Используя библиотеку поддержки EmojiCompat , пользователям вашего приложения не нужно ждать обновления ОС Android, чтобы получить последние эмодзи.

Обратитесь к следующим соответствующим ресурсам:
Как работает EmojiCompat?
Библиотека поддержки EmojiCompat предоставляет классы для реализации обратной совместимости поддержки эмодзи на устройствах под управлением Android 4.4 (уровень API 19) и выше. Вы можете настроить EmojiCompat как с помощью встроенных, так и загружаемых шрифтов. Для получения дополнительной информации о настройке см. следующие разделы:
EmojiCompat идентифицирует эмодзи для заданной CharSequence , заменяет их на EmojiSpans , если это необходимо, и, наконец, отображает глифы эмодзи. На рисунке 2 показан этот процесс.

Настройка загружаемых шрифтов
В настройках загружаемых шрифтов используется функция библиотеки поддержки загружаемых шрифтов для загрузки шрифта эмодзи. Также обновляются необходимые метаданные эмодзи, которые требуются библиотеке поддержки EmojiCompat для соответствия последним версиям спецификации Unicode.
Добавление зависимости от библиотеки поддержки.
Для использования библиотеки поддержки EmojiCompat необходимо изменить зависимости classpath вашего проекта приложения в среде разработки.
Чтобы добавить библиотеку поддержки в проект вашего приложения:
- Откройте файл
build.gradleвашего приложения. - Добавьте библиотеку поддержки в раздел
dependencies.
Классный
dependencies { ... implementation "androidx.emoji:emoji:28.0.0" }
Котлин
dependencies { ... implementation("androidx.emoji:emoji:28.0.0") }
Инициализация конфигурации загружаемого шрифта.
Для загрузки метаданных и шрифта необходимо инициализировать EmojiCompat . Поскольку инициализация может занять некоторое время, процесс инициализации выполняется в фоновом потоке.
Для инициализации EmojiCompat с использованием загруженных настроек шрифтов выполните следующие действия:
- Создайте экземпляр класса
FontRequestи укажите центр сертификации поставщика шрифтов, пакет поставщика шрифтов, запрос шрифта и список наборов хешей для сертификата. Для получения дополнительной информации оFontRequestсм. раздел «Программное использование загружаемых шрифтов» в документации по загружаемым шрифтам . - Создайте экземпляр класса
FontRequestEmojiCompatConfigи предоставьте экземпляры классовContextиFontRequest. - Инициализируйте
EmojiCompat, вызвав методinit()и передав ему экземплярFontRequestEmojiCompatConfig. - Используйте виджеты
EmojiCompatв XML-файлах разметки. Если вы используетеAppCompat, обратитесь к разделу «Использование виджетов EmojiCompat с AppCompat» .
Котлин
class MyApplication : Application() { override fun onCreate() { super.onCreate() val fontRequest = FontRequest( "com.example.fontprovider", "com.example", "emoji compat Font Query", CERTIFICATES ) val config = FontRequestEmojiCompatConfig(this, fontRequest) EmojiCompat.init(config) } }
Java
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); FontRequest fontRequest = new FontRequest( "com.example.fontprovider", "com.example", "emoji compat Font Query", CERTIFICATES); EmojiCompat.Config config = new FontRequestEmojiCompatConfig(this, fontRequest); EmojiCompat.init(config); } }
<android.support.text.emoji.widget.EmojiTextView android:layout_width="wrap_content" android:layout_height="wrap_content"/> <android.support.text.emoji.widget.EmojiEditText android:layout_width="wrap_content" android:layout_height="wrap_content"/> <android.support.text.emoji.widget.EmojiButton android:layout_width="wrap_content" android:layout_height="wrap_content"/>
Для получения дополнительной информации о настройке EmojiCompat с использованием загружаемых настроек шрифтов перейдите к примеру приложения Emoji Compatibility Java | Kotlin .
Компоненты библиотеки

- Виджеты:
EmojiEditText,EmojiTextView,EmojiButton - Реализации виджетов по умолчанию для использования
EmojiCompatсTextView,EditTextиButton. -
EmojiCompat - Основной общедоступный интерфейс для библиотеки поддержки. Он выполняет все внешние запросы и координирует действия с другими частями системы.
-
EmojiCompat.Config - Настраивает создаваемый экземпляр синглтона.
-
EmojiSpan - Подкласс
ReplacementSpan, который заменяет символы (последовательности) и отображает глиф. - Шрифт
EmojiCompat -
EmojiCompatиспользует шрифт для отображения эмодзи. Этот шрифт является модифицированной версией шрифта Android Emoji . Модификация шрифта выглядит следующим образом:- Для обеспечения обратной совместимости при отображении эмодзи все символы эмодзи представлены одной кодовой точкой Unicode в дополнительной области частного использования Unicode-A, начинающейся с U+F0001.
- Дополнительные метаданные эмодзи вставляются в шрифт в бинарном формате и анализируются во время выполнения функцией
EmojiCompat. Данные внедряются вmetaшрифта с помощью приватного тега Emji .
Параметры конфигурации
Вы можете использовать экземпляр EmojiCompat для изменения поведения EmojiCompat . Для настройки конфигурации можно использовать следующие методы базового класса:
-
setReplaceAll(): Определяет, следует лиEmojiCompatзаменять все найденные эмодзи наEmojiSpans. По умолчаниюEmojiCompatпытается определить, может ли система отобразить эмодзи, и не заменяет их. Если установлено значениеtrue,EmojiCompatзаменяет все найденные эмодзи наEmojiSpans. -
setEmojiSpanIndicatorEnabled(): Указывает, заменил лиEmojiCompatэмодзи наEmojiSpan. Если установлено значениеtrue,EmojiCompatотображает фон дляEmojiSpan. Этот метод в основном используется для отладки. -
setEmojiSpanIndicatorColor(): Задает цвет для обозначения элементаEmojiSpan. Значение по умолчанию —GREEN. -
registerInitCallback: Информирует приложение о состоянии инициализацииEmojiCompat.
Котлин
val config = FontRequestEmojiCompatConfig(...) .setReplaceAll(true) .setEmojiSpanIndicatorEnabled(true) .setEmojiSpanIndicatorColor(Color.GREEN) .registerInitCallback(object: EmojiCompat.InitCallback() { ... })
Java
EmojiCompat.Config config = new FontRequestEmojiCompatConfig(...) .setReplaceAll(true) .setEmojiSpanIndicatorEnabled(true) .setEmojiSpanIndicatorColor(Color.GREEN) .registerInitCallback(new InitCallback() {...})
Добавление слушателей инициализации
Классы EmojiCompat и EmojiCompat предоставляют методы registerInitCallback() и unregisterInitCallback() для регистрации функции обратного вызова инициализации. Чтобы использовать эти методы, создайте экземпляр класса EmojiCompat.InitCallback . Вызовите эти методы, передав в качестве аргумента экземпляр класса EmojiCompat.InitCallback . Если инициализация библиотеки поддержки EmojiCompat прошла успешно, класс EmojiCompat вызывает метод onInitialized() . Если инициализация библиотеки не удалась, класс EmojiCompat вызывает метод onFailed() .
Чтобы проверить состояние инициализации в любой момент, вызовите метод getLoadState() . Он возвращает одно из следующих значений: LOAD_STATE_LOADING , LOAD_STATE_SUCCEEDED или LOAD_STATE_FAILED .
Использование EmojiCompat с виджетами AppCompat
Если вы используете AppCompat widgets , вы можете использовать виджеты EmojiCompat , которые наследуются от AppCompat widgets .
- Добавьте библиотеку поддержки в раздел зависимостей.
Классный
dependencies { ... implementation "androidx.emoji:emoji-bundled:$version" }
Котлин
dependencies { implementation("androidx.emoji:emoji-appcompat:$version") }
Классный
dependencies { implementation "androidx.emoji:emoji-appcompat:$version" }
- Используйте виджеты
EmojiCompatAppCompat Widgetв XML-файлах разметки.<android.support.text.emoji.widget.EmojiAppCompatTextView android:layout_width="wrap_content" android:layout_height="wrap_content"/> <android.support.text.emoji.widget.EmojiAppCompatEditText android:layout_width="wrap_content" android:layout_height="wrap_content"/> <android.support.text.emoji.widget.EmojiAppCompatButton android:layout_width="wrap_content" android:layout_height="wrap_content"/>
Настройка комплекта шрифтов
Библиотека поддержки
EmojiCompatтакже доступна в виде встроенного шрифта. Этот пакет включает шрифт со встроенными метаданными. Пакет также включаетBundledEmojiCompatConfig, который используетAssetManagerдля загрузки метаданных и шрифтов.Примечание: Размер шрифта указан в нескольких мегабайтах.
Добавление зависимости от библиотеки поддержки.
Для использования библиотеки поддержки
EmojiCompatс встроенной конфигурацией шрифтов необходимо изменить зависимости classpath в вашем проекте приложения в среде разработки.Чтобы добавить библиотеку поддержки в проект вашего приложения:
- Откройте файл
build.gradleвашего приложения. - Добавьте библиотеку поддержки в раздел
dependencies.
Классный
dependencies { ... implementation "androidx.emoji:emoji:28.0.0" }
Котлин
dependencies { ... implementation("androidx.emoji:emoji:28.0.0") }
Использование встроенных шрифтов для настройки EmojiCompat
Чтобы использовать встроенные шрифты для настройки
EmojiCompat, выполните следующие действия:- Используйте
BundledEmojiCompatConfigдля создания экземпляраEmojiCompatи предоставления экземпляраContext. - Вызовите метод
init()для инициализацииEmojiCompatи передайте ему экземпляр классаBundledEmojiCompatConfig.
Котлин
class MyApplication : Application() { override fun onCreate() { super.onCreate() val config = BundledEmojiCompatConfig(this) EmojiCompat.init(config) } }
Java
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); EmojiCompat.Config config = new BundledEmojiCompatConfig(this); EmojiCompat.init(config); ... } }
Использование EmojiCompat без виджетов
EmojiCompatиспользуетEmojiSpanдля корректного отображения изображений. Поэтому он должен преобразовывать любой заданныйCharSequenceв экземплярыSpannedс помощьюEmojiSpans. КлассEmojiCompatпредоставляет метод для преобразованияCharSequencesв экземплярыSpannedс помощьюEmojiSpans. Используя этот метод, вы можете обрабатывать и кэшировать обработанные экземпляры вместо исходной строки, что повышает производительность вашего приложения.Котлин
val processed = EmojiCompat.get().process("neutral face \uD83D\uDE10")
Java
CharSequence processed = EmojiCompat.get().process("neutral face \uD83D\uDE10");
Использование EmojiCompat для IME
Используя библиотеку поддержки
EmojiCompat, клавиатуры могут отображать эмодзи, поддерживаемые приложением, с которым они взаимодействуют. Интерфейсы ввода-вывода (IME) могут использовать методhasEmojiGlyph()для проверки того, способен лиEmojiCompatотображать эмодзи. Этот метод принимаетCharSequenceсодержащий эмодзи, и возвращаетtrueеслиEmojiCompatможет обнаружить и отобразить эмодзи.Клавиатура также может проверить версию библиотеки поддержки
EmojiCompat, которую поддерживает приложение, чтобы определить, какие эмодзи следует отображать в палитре. Для проверки версии, если она доступна, клавиатуре необходимо проверить, существуют ли следующие ключи в пакетеEditorInfo.extras:-
EDITOR_INFO_METAVERSION_KEY -
EDITOR_INFO_REPLACE_ALL_KEY
Если ключ существует в пакете, его значение представляет собой версию метаданных эмодзи, используемую приложением. Если этот ключ отсутствует, приложение не использует
EmojiCompat.Если ключ существует и имеет значение
true, это означает, что приложение вызвало методSetReplaceAll(). Для получения дополнительной информации о настройкеEmojiCompatсм. раздел «Параметры конфигурации» .После получения ключей из пакета
EditorInfo.extrasклавиатура может использовать методhasEmojiGlyph(), гдеmetadataVersion— это значение параметраEDITOR_INFO_METAVERSION_KEY, чтобы проверить, может ли приложение отобразить определенный эмодзи.Использование EmojiCompat с пользовательскими виджетами
Вы всегда можете использовать метод
process()для предварительной обработкиCharSequenceв вашем приложении и добавления его в любой виджет, который может отображать экземплярыSpanned; например,TextView. Кроме того,EmojiCompatпредоставляет следующие вспомогательные классы для виджетов, позволяющие с минимальными усилиями обогатить ваши пользовательские виджеты поддержкой эмодзи.- Пример текстового поля
- Пример текста-запроса
Котлин
class MyTextView(context: Context) : AppCompatTextView(context) { private val emojiTextViewHelper: EmojiTextViewHelper by lazy(LazyThreadSafetyMode.NONE) { EmojiTextViewHelper(this).apply { updateTransformationMethod() } } override fun setFilters(filters: Array<InputFilter>) { super.setFilters(emojiTextViewHelper.getFilters(filters)) } override fun setAllCaps(allCaps: Boolean) { super.setAllCaps(allCaps) emojiTextViewHelper.setAllCaps(allCaps) } }
Java
public class MyTextView extends AppCompatTextView { ... public MyTextView(Context context) { super(context); init(); } ... private void init() { getEmojiTextViewHelper().updateTransformationMethod(); } @Override public void setFilters(InputFilter[] filters) { super.setFilters(getEmojiTextViewHelper().getFilters(filters)); } @Override public void setAllCaps(boolean allCaps) { super.setAllCaps(allCaps); getEmojiTextViewHelper().setAllCaps(allCaps); } private EmojiTextViewHelper getEmojiTextViewHelper() { ... } }
Котлин
class MyEditText(context: Context) : AppCompatEditText(context) { private val emojiEditTextHelper: EmojiEditTextHelper by lazy(LazyThreadSafetyMode.NONE) { EmojiEditTextHelper(this).also { super.setKeyListener(it.getKeyListener(keyListener)) } } override fun setKeyListener(input: KeyListener?) { input?.also { super.setKeyListener(emojiEditTextHelper.getKeyListener(it)) } } override fun onCreateInputConnection(outAttrs: EditorInfo): InputConnection { val inputConnection: InputConnection = super.onCreateInputConnection(outAttrs) return emojiEditTextHelper.onCreateInputConnection( inputConnection, outAttrs ) as InputConnection } }
Java
public class MyEditText extends AppCompatEditText { ... public MyEditText(Context context) { super(context); init(); } ... private void init() { super.setKeyListener(getEmojiEditTextHelper().getKeyListener(getKeyListener())); } @Override public void setKeyListener(android.text.method.KeyListener keyListener) { super.setKeyListener(getEmojiEditTextHelper().getKeyListener(keyListener)); } @Override public InputConnection onCreateInputConnection(EditorInfo outAttrs) { InputConnection inputConnection = super.onCreateInputConnection(outAttrs); return getEmojiEditTextHelper().onCreateInputConnection(inputConnection, outAttrs); } private EmojiEditTextHelper getEmojiEditTextHelper() { ... } }
Часто задаваемые вопросы
- Как мне начать загрузку шрифта?
- Сколько времени занимает инициализация?
- Сколько памяти использует библиотека поддержки EmojiCompat?
- Можно ли использовать EmojiCompat для пользовательского TextView?
- Что произойдет, если я добавлю виджеты в XML-файлы разметки на устройствах под управлением Android 4.4 (уровень API 19) или ниже?
Шрифты с эмодзи загружаются при первом запросе, если они отсутствуют на устройстве. Планирование загрузки происходит незаметно для приложения.
После загрузки шрифта инициализация
EmojiCompatзанимает приблизительно 150 миллисекунд.В настоящее время структура данных для поиска эмодзи загружается в память приложения и занимает около 200 КБ.
Да. EmojiCompat предоставляет вспомогательные классы для пользовательских виджетов. Также можно предварительно обработать заданную строку и преобразовать её в
Spanned. Для получения дополнительной информации о вспомогательных классах виджетов см. раздел «Использование EmojiCompat с пользовательскими виджетами» .Вы можете включить библиотеку поддержки
EmojiCompatили её виджеты в свои приложения, поддерживающие устройства под управлением Android 4.4 (уровень API 19) или ниже. Однако, если устройство работает на версии Android ниже уровня API 19,EmojiCompatи её виджеты находятся в состоянии «бездействия». Это означает, чтоEmojiTextViewведёт себя точно так жеLOAD_STATE_SUCCEEDEDкак обычныйTextView; он немедленно переходит в состояниеEmojiCompatпри вызове методаinit().Дополнительные ресурсы
Для получения дополнительной информации об использовании библиотеки
EmojiCompatпосмотрите видеоролик EmojiCompat .Контент и образцы кода на этой странице предоставлены по лицензиям. Java и OpenJDK – это зарегистрированные товарные знаки корпорации Oracle и ее аффилированных лиц.
Последнее обновление: 2026-02-03 UTC.
[[["Прост для понимания","easyToUnderstand","thumb-up"],["Помог мне решить мою проблему","solvedMyProblem","thumb-up"],["Другое","otherUp","thumb-up"]],[["Отсутствует нужная мне информация","missingTheInformationINeed","thumb-down"],["Слишком сложен/слишком много шагов","tooComplicatedTooManySteps","thumb-down"],["Устарел","outOfDate","thumb-down"],["Проблема с переводом текста","translationIssue","thumb-down"],["Проблемы образцов/кода","samplesCodeIssue","thumb-down"],["Другое","otherDown","thumb-down"]],["Последнее обновление: 2026-02-03 UTC."],[],[]] - Используйте виджеты
