Standardowy zestaw emotikonów jest co roku odświeżany przez Unicode, ponieważ ich użycie we wszystkich typach aplikacji szybko rośnie.
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łe kwadratowe pole o nazwie tofu (☐) lub inne nieprawidłowo renderowane sekwencje emotikonów.
Wersje Androida 11 (poziom API 30) i starsze nie mogą aktualizować czcionki emotikonów, więc aplikacje, które wyświetlają je w tych wersjach, muszą być aktualizowane ręcznie.
Poniżej znajdziesz 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) obsługuje najnowszą wersję emotikonów, w tym zapewnia zgodność wsteczną ze starszymi wersjami Androida 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, od razu masz dostęp do obsługi współczesnych emotikonów.
Najlepszym sposobem na przetestowanie najnowszych emotikonów w aplikacji jest użycie prawdziwego urządzenia z interfejsem API na poziomie 30 lub niższym.
Jeśli używasz niestandardowego rozwiązania do obsługi emotikonów lub z innego powodu musisz wyłączyć domyślne rozwiązanie do obsługi 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 tym samym Activity, upewnij się, że używasz odpowiednich interfejsów API do prawidłowego konfigurowania emotikonów. W sekcjach poniżej opisujemy, kiedy należy używać poszczególnych interfejsów API.
Przedłużam od: ComponentActivity
Jeśli Activity rozszerza Compose ComponentActivity zamiast AppCompatActivity, postępuj zgodnie z instrukcjami Obsługa emotikonów bez AppCompat.
Ponieważ nie rozszerzasz klasy AppCompatActivity, dodaj bibliotekę Emoji2 do zależności i używaj w widokach klasy EmojiTextView 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" />
Przedłużam od: AppCompatActivity
Jeśli klasa Activity rozszerza klasę AppCompatActivity, możesz użyć ComposeView, aby wywołać funkcje typu „composable”. Emoji są prawidłowo renderowane w różnych wersjach Androida, gdy używasz funkcji kompozycyjnych Text.
Jeśli rozszerzasz AppCompatActivity, rozwiń TextView z XML, aby emotikony były renderowane prawidłowo.
Dotyczy to sytuacji, gdy rozwijasz plik 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 } } } }
- w obiekcie
ComposeViewza pomocą powiązania widoku przy użyciuAndroidViewBinding, 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 } ) } } } ) } }
Szczegółowe informacje znajdziesz w dokumentacji interfejsów API interoperacyjności.
Rozwiązywanie problemów
Jeśli zamiast emotikonów widzisz tofu (☐), najpierw sprawdź, czy problem nie dotyczy konkretnego urządzenia testowego. Oto kilka najważniejszych rzeczy, które możesz sprawdzić:
- Być może używasz urządzenia, na którym niedawno zainstalowano nowy system, 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 konto Google. Pamiętaj, że interfejs API powinien mieć wersję 30 lub starszą, aby emotikony działały w odpowiednich wersjach.
- Telefon testowy nie obsługuje czcionek do pobrania.
- Sprawdź, czy masz odpowiednią 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