Standardowy zestaw emotikonów jest co roku aktualizowany przez Unicode, ponieważ użycie emotikonów szybko rośnie we wszystkich typach aplikacji.
Jeśli Twoja aplikacja wyświetla treści z internetu lub umożliwia wprowadzanie tekstu, zdecydowanie zalecamy obsługę najnowszych czcionek emotikonów. W przeciwnym razie nowsze emotikony mogą być wyświetlane jako mały kwadratowy blok zwany tofu (☐) lub inne nieprawidłowo renderowane sekwencje emotikonów.
W wersjach Androida 11 (poziom interfejsu API 30) i starszych nie można zaktualizować czcionki emotikonów, więc aplikacje, które je wyświetlają w tych wersjach, muszą zostać zaktualizowane ręcznie.
Oto przykłady nowoczesnych emotikonów.
| Przykłady | Wersja |
|---|---|
| 🇨🇶 | 16.0 (wrzesień 2024 r.) |
| 🐦🔥 🧑🧑🧒🧒 👩🏽🦽➡️ 🇲🇶 | 15.1 (wrzesień 2023 r.) |
| 🩷 🫸🏼 🐦⬛ | 15.0 (wrzesień 2022 r.) |
| 🫠 🫱🏼🫲🏿 🫰🏽 | 14.0 (wrzesień 2021 r.) |
| 😶🌫️ 🧔🏻♀️ 🧑🏿❤️🧑🏾 | 13.1 (wrzesień 2020 r.) |
| 🥲 🥷🏿 🐻❄️ | 13.0 (marzec 2020 r.) |
| 🧑🏻🦰 🧑🏿🦯 👩🏻🤝👩🏼 | 12.1 (październik 2019 r.) |
| 🦩 🦻🏿 👩🏼🤝👩🏻 | 12.0 (luty 2019 r.) |
BOM z marca 2023 r. (Compose UI 1.4) wprowadza obsługę najnowszej wersji emotikonów, w tym zgodność wsteczną ze starszymi wersjami Androida aż do interfejsu API 21.
Ta obsługa nie wymaga żadnych zmian w aplikacji – jeśli używasz Text i
TextField (Material 2 lub Material 3) albo BasicText i
BasicTextField, masz od razu dostęp do nowoczesnych emotikonów.
Najlepszym sposobem na przetestowanie najnowszych emotikonów w aplikacji jest użycie prawdziwego urządzenia z interfejsem API 30 lub starszym.
Jeśli używasz niestandardowego rozwiązania do obsługi emotikonów lub z innego powodu musisz wyłączyć domyślne renderowanie emotikonów w Compose, możesz użyć
PlatformTextStyle(emojiSupportMatch):
Text( text = "Hello $EMOJI_TEXT", style = TextStyle( platformStyle = PlatformTextStyle( emojiSupportMatch = EmojiSupportMatch.None )/* ... */ ) )
Interoperacyjność
Jeśli Twoja aplikacja używa zarówno widoków, jak i Compose w tej samej Activity, upewnij się, że używasz odpowiednich interfejsów API do prawidłowego konfigurowania emotikonów. W kolejnych sekcjach opisujemy, kiedy należy używać poszczególnych interfejsów API.
Rozszerzanie z ComponentActivity
Jeśli Twoja Activity rozszerza się z Compose ComponentActivity zamiast z
AppCompatActivity, postępuj zgodnie z instrukcjami w sekcji Obsługa emotikonów bez AppCompat.
Ponieważ nie rozszerzasz AppCompatActivity, dodaj bibliotekę Emoji2
do zależności i używaj EmojiTextView w widokach
zamiast widżetu TextView, jak pokazano w tym fragmencie kodu:
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 } } } }
Następnie w pliku XML:
<androidx.emoji2.widget.EmojiTextView android:id="@+id/emoji_text_view" android:layout_width="match_parent" android:layout_height="wrap_content" />
Rozszerzanie z AppCompatActivity
Jeśli Twoja Activity rozszerza się z AppCompatActivity, możesz użyć
ComposeView aby wywoływać funkcje kompozycyjne. Emotikony są prawidłowo renderowane we wszystkich wersjach Androida, gdy używasz kompozycyjnych elementów tekstowych.
Jeśli rozszerzasz z AppCompatActivity, rozwiń TextView z XML
, aby emotikony były prawidłowo renderowane.
Dotyczy to sytuacji, gdy rozwijasz XML:
- poza
ComposeView, wActivity. Zwróć uwagę na użycieAppCompatActivityiTextVieww tym fragmencie kodu:
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 } } } }
- wewnątrz
ComposeView, za pomocą powiązania widoku z użyciemAndroidViewBinding, jak w tym fragmencie kodu:
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 } } } } ) } }
Aby rozwinąć tekst za pomocą AndroidView wewnątrz ComposeView, użyj
AppCompatTextView, aby prawidłowo renderować emotikony:
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 } ) } } } ) } }
Więcej informacji znajdziesz w dokumentacji interfejsów API interoperacyjności.
Rozwiązywanie problemów
Jeśli zamiast emotikonu widzisz tofu (☐), najpierw sprawdź, czy problem występuje na konkretnym urządzeniu testowym. Możesz sprawdzić kilka głównych kwestii:
- Możesz używać urządzenia, na którym niedawno zainstalowano oprogramowanie, lub nowego emulatora. Jeśli to możliwe, spróbuj użyć innego prawdziwego urządzenia testowego, którego często używasz i na którym jesteś zalogowany(-a) na swoje konto Google. Pamiętaj, że interfejs API powinien mieć poziom 30 lub niższy, aby emotikony działały w prawidłowych wersjach.
- Telefon testowy nie obsługuje czcionek do pobrania.
- Sprawdź prawidłową wersję Usług Google Play.
Polecane dla Ciebie
- Uwaga: tekst linku jest wyświetlany, gdy język JavaScript jest wyłączony.
- Inne kwestie, które warto wziąć pod uwagę
- Tekst w Compose
- Przewijanie