Стандартный набор эмодзи ежегодно обновляется 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 за март 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 отключен.
- Другие соображения
- Текст в композиции
- Прокрутка