Standardowy zestaw emotikonów jest odświeżany co roku przez Unicode, ponieważ użycie emotikonów szybko rośnie we wszystkich typach aplikacji.
Jeśli Twoja aplikacja wyświetla treści internetowe lub umożliwia wprowadzanie tekstu, zdecydowanie zalecamy obsługę najnowszych czcionek emoji. W przeciwnym razie późniejsze emotikony mogą być wyświetlane jako mały kwadratowy blok zwany tofu (☐) lub inne nieprawidłowo renderowane sekwencje emotikonów.
W przypadku Androida w wersji 11 (poziom interfejsu API 30) i starszych nie można zaktualizować czcionki emoji, więc aplikacje, które wyświetlają emotikony w tych wersjach, muszą być aktualizowane ręcznie.
Oto przykłady nowoczesnych emoji.
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ę emoji, w tym wsteczną zgodność ze starszymi wersjami Androida aż do API 21.
Ta obsługa nie wymaga wprowadzania zmian w aplikacji – jeśli używasz Text
i TextField
(Material 2 lub Material 3) albo BasicText
i BasicTextField
, możesz od razu korzystać z nowoczesnych 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ślną rozdzielczość emotikonów w oknie tworzenia wiadomości, możesz użyć tego kodu:PlatformTextStyle(emojiSupportMatch)
Text( text = "Hello $EMOJI_TEXT", style = TextStyle( platformStyle = PlatformTextStyle( emojiSupportMatch = EmojiSupportMatch.None )/* ... */ ) )
Interoperacyjność
Jeśli Twoja aplikacja korzysta zarówno z widoków, jak i z biblioteki Compose w tym samym 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 od ComponentActivity
Jeśli Activity
rozciąga się od Compose ComponentActivity
zamiast
AppCompatActivity
, postępuj zgodnie z instrukcjami w sekcji Obsługa emoji bez AppCompat.
Ponieważ nie rozszerzasz klasy AppCompatActivity
, dodaj bibliotekę Emoji2 do zależności i używaj w widokach 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" />
Rozszerzanie od AppCompatActivity
Jeśli Twój Activity
rozciąga się od AppCompatActivity
, możesz użyć ComposeView
, aby wywołać funkcje kompozycyjne. Emotikony są prawidłowo renderowane we wszystkich wersjach Androida, gdy używasz komponentów kompozycyjnych Text.
Jeśli rozszerzasz AppCompatActivity
, rozwiń TextView
z XML, aby emotikony były prawidłowo renderowane.
Dotyczy to sytuacji, gdy zwiększasz rozmiar pliku XML:
- poza
ComposeView
, wActivity
. Zwróć uwagę na użycie znakówAppCompatActivity
iTextView
w 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
ComposeView
za pomocą powiązania widoku, jak w tym fragmencie kodu: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 } } } } ) } }
Aby rozwinąć tekst z emotikonem AndroidView
w ComposeView
, użyj AppCompatTextView
, aby poprawnie 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 do współdziałania.
Rozwiązywanie problemów
Jeśli zamiast emotikonu widzisz tofu (☐), najpierw sprawdź, czy problem występuje na konkretnym urządzeniu testowym. Oto kilka głównych rzeczy, które możesz sprawdzić:
- Możesz używać niedawno sflashowanego urządzenia 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ć wartość 30 lub niższą, aby emotikony działały w odpowiednich wersjach.
- Telefon testowy nie obsługuje czcionek do pobrania.
- Sprawdź właściwą wersję Usług Google Play.
Polecane dla Ciebie
- Uwaga: tekst linku jest wyświetlany, gdy JavaScript jest wyłączony.
- Inne kwestie, które warto wziąć pod uwagę
- Tekst w oknie tworzenia
- Przewijanie