Стандартный набор эмодзи ежегодно обновляется Unicode , поскольку использование эмодзи стремительно растет во всех типах приложений.
Если ваше приложение отображает интернет-контент или обеспечивает ввод текста, мы настоятельно рекомендуем поддерживать последние шрифты эмодзи. В противном случае более поздние эмодзи могут отображаться как небольшой квадратный ящик под названием тофу (☐) или другие неправильно отображаемые последовательности эмодзи.
Версии Android 11 (уровень API 30) и ниже не могут обновлять шрифт эмодзи, поэтому приложения, отображающие их в этих версиях, необходимо обновлять вручную.
Ниже приведены примеры современных эмодзи.
Примеры | Версия |
---|---|
🇨🇶 | 16.0 (сентябрь 2024 г.) |
🐦🔥 🧑🧑🧒🧒 👩🏽🦽➡️ 🇲🇶 | 15.1 (сентябрь 2023 г.) |
🩷 🫸🏼 🐦⬛ | 15.0 (сентябрь 2022 г.) |
🫠 🫱🏼🫲🏿 🫰🏽 | 14.0 (сентябрь 2021 г.) |
😶🌫️ 🧔🏻♀️ 🧑🏿❤️🧑🏾 | 13.1 (сентябрь 2020 г.) |
🥲 🥷🏿 🐻❄️ | 13.0 (март 2020 г.) |
🧑🏻🦰 🧑🏿🦯 👩🏻🤝👩🏼 | 12.1 (октябрь 2019) |
🦩 🦻🏿 👩🏼🤝👩🏻 | 12.0 (февраль 2019) |
BOM March 2023 ( Compose UI 1.4 ) обеспечивает поддержку последней версии эмодзи , включая обратную совместимость со старыми версиями Android вплоть до API 21.
Эта поддержка не требует внесения изменений в ваше приложение — если вы используете Text
и TextField
(Material 2 или Material 3) или BasicText
и BasicTextField
, вы получаете поддержку современных эмодзи «из коробки».
Лучший способ протестировать новейшие эмодзи в вашем приложении — использовать реальное устройство с API 30 или ниже.
Если вы используете пользовательское решение для эмодзи или вам необходимо отключить разрешение эмодзи по умолчанию в Compose по какой-либо другой причине, вы можете использовать PlatformTextStyle(emojiSupportMatch)
:
Text( text = "Hello $EMOJI_TEXT", style = TextStyle( platformStyle = PlatformTextStyle( emojiSupportMatch = EmojiSupportMatch.None )/* ... */ ) )
Взаимодействие
Если ваше приложение использует Views и Compose в одном Activity
, убедитесь, что вы используете соответствующие API для правильной настройки эмодзи. В следующих разделах описывается, когда использовать каждый API.
Расширение от ComponentActivity
Если ваша Activity
расширяет Compose ComponentActivity
вместо AppCompatActivity
, следуйте инструкциям по поддержке эмодзи без AppCompat .
Поскольку вы не расширяете AppCompatActivity
, добавьте библиотеку Emoji2 к своим зависимостям и используйте EmojiTextView
в своих представлениях вместо виджета TextView
, как показано в следующем фрагменте:
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 } } } }
Затем в вашем XML-файле:
<androidx.emoji2.widget.EmojiTextView android:id="@+id/emoji_text_view" android:layout_width="match_parent" android:layout_height="wrap_content" />
Расширение от AppCompatActivity
Если ваша Activity
расширяется от AppCompatActivity
, вы можете использовать ComposeView
для вызова компонуемых функций. Эмодзи отображаются правильно в версиях Android при использовании текстовых компонуемых функций.
Если вы расширяете AppCompatActivity
, добавьте TextView
из XML, чтобы эмодзи отображались правильно.
Это применимо, если вы расширяете XML:
- вне
ComposeView
, вActivity
. Обратите внимание на использованиеAppCompatActivity
иTextView
в следующем фрагменте:
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 } } } }
- внутри
ComposeView
, через привязку представления с помощьюAndroidViewBinding
, как в следующем фрагменте:
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 } } } } ) } }
Чтобы раздуть текст с помощью AndroidView
внутри ComposeView
, используйте AppCompatTextView
для правильной визуализации эмодзи:
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 } ) } } } ) } }
Подробную информацию см. в документации по API взаимодействия .
Поиск неисправностей
Если вы видите тофу (☐) вместо эмодзи, сначала проверьте, является ли проблема вашим конкретным тестовым устройством. Есть несколько основных вещей, которые вы можете проверить:
- Возможно, вы используете недавно прошитое устройство или новый эмулятор . Если возможно, попробуйте другое настоящее тестовое устройство, которое вы часто используете и которое входит в ваш аккаунт Google. Помните, что API должен быть 30 или ниже, чтобы гарантировать работу эмодзи в правильных версиях.
- Тестовый телефон не поддерживает загружаемые шрифты .
- Проверьте правильную версию сервисов Google Play .
Рекомендовано для вас
- Примечание: текст ссылки отображается, когда JavaScript отключен.
- Другие соображения
- Текст в Compose
- Прокрутить