Standardowy zestaw emotikonów jest odświeżany co roku przez Unicode, bo rośnie wykorzystanie emotikonów dla wszystkich typów aplikacji.
Jeśli aplikacja wyświetla treści internetowe lub umożliwia wpisywanie tekstu, zdecydowanie zalecamy obsługę najnowszych czcionek emotikonów. W przeciwnym razie później emotikony mogą być wyświetlane jako małe kwadratowe pole o nazwie tofu (☐) lub inne nieprawidłowo renderowane sekwencje emotikonów.
Android w wersji 11 (poziom interfejsu API 30) i starszych nie może aktualizować czcionki emotikonów, więc aplikacje, w których są wyświetlane, należy zaktualizować ręcznie.
Oto przykłady nowoczesnych emotikonów.
Przykłady | Wersja |
---|---|
🫠 🫱🏼🫲🏿 🫰🏽 | 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.) |
Biblioteka androidx.emoji2:emoji2
zapewnia prostszą zgodność wsteczną
na starszych wersjach Androida. Biblioteka emoji2
to zależność biblioteki
AppCompat
i nie wymaga
do dalszej konfiguracji.
Obsługa emotikonów w funkcji tworzenia wiadomości
BOM – marzec 2023 r. (interfejs tworzenia wiadomości 1.4) zapewnia obsługę najnowszych emotikonów w tym zgodność wsteczną ze starszymi wersjami Androida Interfejs API 21. Z tego artykułu dowiesz się, jak skonfigurować nowoczesne emotikony w systemie widoków. Zobacz Emotikony podczas tworzenia wiadomości.
Wymagania wstępne
Aby sprawdzić, czy aplikacja prawidłowo wyświetla nowsze emotikony, uruchom ją na urządzeniu z Androidem 10 (poziom interfejsu API 29) lub niższym. Na tej stronie znajdziesz nowoczesne emotikony, które można wyświetlić do testowania.
Używaj AppCompat do obsługi najnowszych emotikonów
AppCompat
1.4 zapewnia obsługę emotikonów.
Aby używać emotikona AppCompat
do obsługi emotikonów, wykonaj te czynności:
Sprawdź, czy moduł zależy od wersji biblioteki
AppCompat
1.4.0-alfa01 lub wyższe.build.gradle // Ensure version is 1.4.0-alpha01 or higher. implementation "androidx.appcompat:appcompat.$appcompatVersion"
Upewnij się, że wszystkie działania z tekstem rozszerzają
AppCompatActivity
zajęcia.Kotlin
MyActivity.kt class MyActivity: AppCompatActivity { ... }
Java
MyActivity.java class MyActivity extends AppCompatActivity { ... }
Przetestuj integrację, uruchamiając aplikację na urządzeniu z Androidem 10 lub niższy i wyświetli się następujący ciąg testowy. Sprawdź, czy wszystkie znaki nie będą działać prawidłowo.
- 14.0: 🫠, 🫱🏼 🫲🏿, 🫰🏽
- 13.1: 😶 🌫️, 🧔🏻 ♀️, 🧑🏿 ❤️ 🧑🏾
- 13.0: 🥲, 🥷🏿, 🐻 ☕️
- 12.1: 🧑🏻 🦰, 🧑🏿 🦯, 👩🏻 🤝 👩🏼
- 12.0: 🦩, 🦻🏿, 👩🏼 🤝 👩🏻
Twoja aplikacja automatycznie wyświetla zgodne wstecznie emotikony na wszystkich urządzeniach, które:
udostępniają dostawcę czcionek do pobrania zgodnej z emoji2
, takiego jak urządzenia
obsługiwane przez Usługi Google Play.
Jeśli Twoja aplikacja korzysta z AppCompat, ale wyświetla tofu (☐)
W niektórych przypadkach zamiast odpowiedniego emotikona aplikacja może wyświetlać tofu, nawet jeśli
dodasz bibliotekę AppCompat
. Poniżej przedstawiono możliwe wyjaśnienia i
i rozwiązania.
Korzystasz z aplikacji na urządzeniu, na którym ostatnio zainstalowano aplikację lub w nowym emulatorze.
Wyczyść dane Usług Google Play aplikacji, aby wyczyścić pamięć podręczną czcionek, która może co dzieje się podczas uruchamiania. Zazwyczaj rozwiązuje to problem po kilku godzinach.
Aby wyczyścić dane aplikacji:
Otwórz Ustawienia w urządzeniu z systemem Android.
Kliknij Aplikacje i powiadomienia.
Kliknij Wyświetl wszystkie aplikacje lub Informacje o aplikacji.
Przewiń listę aplikacji i kliknij Usługi Google Play.
Kliknij Pamięć urządzenia i pamięć podręczna.
Kliknij Wyczyść pamięć podręczną.
Twoja aplikacja nie korzysta z klasy związanej z tekstem AppCompat
Może się tak zdarzyć, jeśli nie przedłużysz rozszerzenia AppCompatActivity
lub utworzysz instancję
w kodzie, np. TextView
. Sprawdź, czy:
- Zakres aktywności obejmuje
AppCompatActivity
. - Jeśli tworzysz widok w kodzie, użyj prawidłowego tagu
AppCompat
podklasa.
AppCompatActivity
automatycznie dodaje wartość AppCompatTextView
w miejsce
TextView
podczas rozszerzania pliku XML, więc nie musisz go aktualizować.
Telefon testowy nie obsługuje czcionek do pobrania
Sprawdź, czy DefaultEmojiCompatConfig.create
zwraca konfigurację niepustą.
Emulator na wcześniejszym poziomie interfejsu API nie uaktualnił Usług Google Play
Jeśli używasz emulatora na wcześniejszym poziomie interfejsu API, może być konieczne zaktualizowanie
emoji2
łączy usługi Google Play z usługami Google Play, aby znaleźć dostawcę czcionek. Aby to zrobić:
zaloguj się w Sklepie Google Play w emulatorze.
Aby sprawdzić, czy zainstalowana jest zgodna wersja, wykonaj te czynności:
Uruchom to polecenie:
adb shell dumpsys package com.google.android.gms | grep version
Sprawdź, czy
versionCode
ma wartość większą niż211200000
.
Obsługuj emotikony bez użycia aplikacji AppCompat
Jeśli Twoja aplikacja nie może zawierać AppCompat
, może używać bezpośrednio emoji2
. Ten
wymaga więcej pracy, więc używaj tej metody tylko wtedy, gdy Twoja aplikacja nie może korzystać z AppCompat
.
Aby obsługiwać emotikony bez biblioteki AppCompat
, wykonaj te czynności:
W pliku
build.gradle
aplikacji umieśćemoji2
iemoji2-views
.build.gradle def emojiVersion = "1.0.0-alpha03" implementation "androidx.emoji2:emoji2:$emojiVersion" implementation "androidx.emoji2:emoji2-views:$emojiVersion"
Moduł
emoji2-views
zapewnia podklasyTextView
,Button
iEditText
, które stosująEmojiCompat
. Nie używaj w aplikacji zawierającej dyrektywęAppCompat
, ponieważ ma ona już zaimplementowanąEmojiCompat
W pliku XML i kodzie – wszędzie tam, gdzie używasz atrybutów
TextView
,EditText
lubButton
– użyjEmojiTextView
,EmojiEditText
lubEmojiButton
.activity_main.xml <androidx.emoji2.widget.EmojiTextView ... /> <androidx.emoji2.widget.EmojiEditText ... /> <androidx.emoji2.widget.EmojiButton ... />
Po włączeniu modułu
emoji2
system używa domyślnego modułu do pobrania dostawca czcionek do wczytania czcionki emotikonu automatycznie krótko po uruchomieniu aplikacji. Nie wymagana jest dalsza konfiguracja.Aby przetestować integrację, uruchom aplikację na urządzeniu z Androidem 11 lub i wyświetlić następujące ciągi testowe. Sprawdź, czy wszystkie znaki nie będą działać prawidłowo.
- 14.0: 🫠, 🫱🏼 🫲🏿, 🫰🏽
- 13.1: 😶 🌫️, 🧔🏻 ♀️, 🧑🏿 ❤️ 🧑🏾
- 13.0: 🥲, 🥷🏿, 🐻 ☕️
- 12.1: 🧑🏻 🦰, 🧑🏿 🦯, 👩🏻 🤝 👩🏼
- 12.0: 🦩, 🦻🏿, 👩🏼 🤝 👩🏻
Używaj emojiCompat bez widżetów
EmojiCompat
używa EmojiSpan
do
czyli renderowania prawidłowych obrazów. Dlatego musi on przekonwertować dowolny
CharSequence
w
Spanned
z obiektami EmojiSpan
.
Klasa emojiCompat udostępnia metodę process()
do konwertowania pola CharSequences
.
w Spanned
instancji. Korzystając z tej metody, możesz wywołać funkcję process()
w
w tle i zapisywać wyniki w pamięci podręcznej, co poprawia wydajność aplikacji.
Kotlin
val processed = EmojiCompat.get().process("neutral face \uD83D\uDE10")
Java
CharSequence processed = EmojiCompat.get().process("neutral face \uD83D\uDE10");
Korzystanie z Emotikonów w edytorach metod wprowadzania
Klasa EmojiCompat
pozwala klawiaturom renderować emotikony obsługiwane przez aplikację
z którymi wchodzą w interakcję. Edytory metod wprowadzania
(IME) można użyć funkcji
getEmojiMatch()
.
do sprawdzenia, czy instancja EmojiCompat
może wyrenderować
emotikon. Ta metoda wymaga CharSequence
emotikon i zwraca wartość true
, jeśli EmojiCompat
może wykryć i wyświetlić emotikon.
Klawiatura może też sprawdzić wersję systemu EmojiCompat
obsługiwaną przez aplikację
aby określić emotikon do wyrenderowania w palecie. Aby sprawdzić wersję, jeśli
klawiatura może wyszukać następujące klawisze w
EditorInfo.extras
pakiet:
EDITOR_INFO_METAVERSION_KEY
: reprezentuje wersję metadanych emotikona używanej przez aplikację. Jeśli ten klucz nie istnieje, oznacza to, że aplikacja nie korzysta zEmojiCompat
.EDITOR_INFO_REPLACE_ALL_KEY
: jeśli klucz istnieje i jest ustawiony natrue
, aplikacja konfigurujeEmojiCompat
, aby zastąpić wszystkie emotikony, nawet jeśli znajdują się one w systemie.
Dowiedz się więcej o konfigurowaniu instancji Emotikony
Używanie emotikonów w widokach niestandardowych
Jeśli Twoja aplikacja ma widoki niestandardowe, które są
bezpośrednie lub pośrednie podklasy klasy TextView
, na przykład Button
,
Switch
lub EditText
– i w tych widokach mogą być wyświetlane treści wygenerowane przez użytkowników.
każdy z nich musi zastosować
EmojiCompat
.
Ten proces różni się w zależności od tego, czy aplikacja używa biblioteki AppCompat
.
Dodawanie widoków niestandardowych dla aplikacji za pomocą AppCompat
Jeśli Twoja aplikacja używa interfejsu AppCompat
, rozszerz implementację AppCompat
zamiast
i implementacji platformy. Skorzystaj z poniższej tabeli, aby dowiedzieć się,
zwiększ liczbę wyświetleń w usłudze AppCompat
:
Zamiast przedłużać... | Przedłuż |
---|---|
TextView
|
AppCompatTextView
|
EditText
|
AppCompatEditText
|
ToggleButton
|
AppCompatToggleButton
|
Switch
|
SwitchCompat
|
Button
|
AppCompatButton
|
CheckedTextView
|
AppCompatCheckedTextView
|
RadioButton
|
AppCompatRadioButton
|
CheckBox
|
AppCompatCheckBox
|
AutoCompleteTextView
|
AppCompatAutoCompleteTextView
|
MultiAutoCompleteTextView
|
AppCompatMultiAutoCompleteTextView
|
Dodawanie widoków niestandardowych dla aplikacji bez AppCompat
Jeśli Twoja aplikacja nie używa AppCompat
, skorzystaj z pomocy funkcji wyświetlania integracji na stronie
emoji2-views-helper
przeznaczone do użytku w widokach niestandardowych. Te
to aplikacje korzystające z biblioteki AppCompat
do implementacji obsługi emotikonów.
Aby włączyć obsługę widoków niestandardowych w przypadku aplikacji, które nie używają:
AppCompat
Dodaj bibliotekę
emoji2-views-helper
:implementation "androidx.emoji2:emoji2-views-helper:$emojiVersion"
Postępuj zgodnie z instrukcjami, aby uwzględnić
EmojiTextViewHelper
lubEmojiEditTextHelper
w widokach niestandardowych aplikacji.Przetestuj integrację, uruchamiając aplikację na urządzeniu z Androidem 10 lub niższy i wyświetli się następujący ciąg testowy. Sprawdź, czy wszystkie znaki nie będą działać prawidłowo.
- 14.0: 🫠, 🫱🏼 🫲🏿, 🫰🏽
- 13.1: 😶 🌫️, 🧔🏻 ♀️, 🧑🏿 ❤️ 🧑🏾
- 13.0: 🥲, 🥷🏿, 🐻 ☕️
- 12.1: 🧑🏻 🦰, 🧑🏿 🦯, 👩🏻 🤝 👩🏼
- 12.0: 🦩, 🦻🏿, 👩🏼 🤝 👩🏻
Opcjonalne funkcje obsługi emotikona2
Po dodaniu biblioteki emoji2
do aplikacji możesz dodać do niej
funkcje opisane w tej sekcji.
Skonfiguruj emotikon2, aby użyć innej czcionki lub innego dostawcy czcionek do pobrania
Aby skonfigurować emoji2
tak, aby korzystała z innego lub innego dostawcy czcionek do pobrania, wykonaj
następujące:
Wyłącz
EmojiCompatInitializer
dodając do pliku manifestu ten kod:<provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" android:exported="false" tools:node="merge"> <meta-data android:name="androidx.emoji2.text.EmojiCompatInitializer" tools:node="remove" /> </provider>
Wykonaj jedną z tych czynności:
Użyj domyślnej konfiguracji, wywołując
DefaultEmojiCompatConfiguration.create(context)
Utwórz własną konfigurację, aby wczytywać czcionki z innego źródła za pomocą
EmojiCompat.Config
Te zajęcia udostępniają kilka sposobów modyfikowania elementuEmojiCompat
jak działa, jak opisano w następnej sekcji.
Modyfikowanie działania aplikacji emojiCompat
Aby zmodyfikować EmojiCompat
, możesz użyć wystąpienia EmojiCompat.Config
zachowanie użytkownika.
Najważniejsza opcja konfiguracji to
setMetadataLoadStrategy()
, które określa, kiedy EmojiCompat
wczyta czcionkę. Ładowanie czcionki rozpocznie się
Spowoduje to wywołanie metody EmojiCompat.load()
.
system tworzy wątek pobierania czcionek, chyba że aplikacja go udostępnia.
LOAD_STRATEGY_MANUAL
pozwala określić, kiedy ma być wywoływany EmojiCompat.load()
.
LOAD_STRATEGY_DEFAULT
.
powoduje, że wczytywanie rozpoczyna się synchronicznie w wywołaniu funkcji
EmojiCompat.init()
Większość aplikacji używa funkcji LOAD_STRATEGY_MANUAL
, aby mieć kontrolę nad wątkami i czasem ich trwania
ładowania czcionki. Aplikacja musi opóźnić się do chwili, gdy pierwszy ekran wyświetli się do
i uniknąć opóźnień w uruchamianiu. EmojiCompatInitializer
obserwuje to
ćwiczenie i opóźnia wczytywanie czcionki emotikona do czasu wznowienia pierwszego ekranu.
Aby ustawić inne aspekty klasy podstawowej, użyj poniższych metod Konfiguracja:
setReplaceAll()
: określa, czyEmojiCompat
zastępuje wszystkie znalezione emotikony za pomocą wystąpień zEmojiSpan
. Domyślnie, gdyEmojiCompat
określi, że system może nie zastąpią emotikona. Gdy ustawisz wartośćtrue
,EmojiCompat
zastępuje wszystkie emotikony znakamiEmojiSpan
obiektami.setEmojiSpanIndicatorEnabled()
: wskazuje, czyEmojiCompat
zastępuje emotikon ikonąEmojiSpan
obiektu. Gdy ustawisz wartośćtrue
,EmojiCompat
będzie rysować tło dlaEmojiSpan
Ta metoda jest używana głównie do debugowania.setEmojiSpanIndicatorColor
: ustawia kolorEmojiSpan
. Wartość domyślna toGREEN
registerInitCallback()
: informuje aplikację o stanie inicjowania funkcjiEmojiCompat
.
Dodaj detektory inicjowania
Klasy EmojiCompat
i EmojiCompat.Config
oferują
registerInitCallback()
.
oraz
unregisterInitCallback()
.
do rejestrowania i wyrejestrowania wywołań zwrotnych inicjowania. Aplikacja ich używa
wywołania zwrotne oczekiwania na zainicjowanie EmojiCompat
, zanim przetworzysz emotikon na
w wątku w tle
lub w widoku niestandardowym.
Aby użyć tych metod, utwórz instancję
EmojiCompat.InitCallback
zajęcia. Wywołuj te metody i przekazuj je w instancji metody
EmojiCompat.InitCallback
zajęcia. Jeśli inicjowanie się uda,
EmojiCompat
zajęcia wywołuje metodę
onInitialized()
.
. Jeśli nie uda się zainicjować biblioteki, klasa EmojiCompat
wywołuje metodę
onFailed()
.
.
Aby sprawdzić stan inicjowania w dowolnym momencie, wywołaj funkcję
getLoadState()
. Ta metoda zwraca jedną z tych wartości:
LOAD_STATE_LOADING
LOAD_STATE_SUCCEEDED
,
lub
LOAD_STATE_FAILED
.
Obsługa pakietów czcionek za pomocą emotikon2
Za pomocą artefaktu emoji2-bundled
możesz połączyć czcionkę z emotikonami w aplikacji.
Ponieważ jednak czcionka NotoColorEmoji
przekracza 10 MB,
zalecamy, aby w miarę możliwości aplikacja korzystała z czcionek do pobrania.
Artefakt emoji2-bundled
jest przeznaczony dla aplikacji na urządzeniach, które nie obsługują
dostępne do pobrania czcionki.
Aby użyć artefaktu emoji2-bundled
:
Uwzględnij artefakty
emoji2-bundled
iemoji2
:implementation "androidx.emoji2:emoji2:$emojiVersion" implementation "androidx.emoji2:emoji2-bundled:$emojiVersion"
Skonfiguruj
emoji2
tak, aby korzystała z połączonej konfiguracji:Kotlin
EmojiCompat.init(BundledEmojiCompatConfig(context))
Java
EmojiCompat.init(new BundledEmojiCompatConfig(context));
Przetestuj integrację, wykonując poprzednie kroki w celu uwzględnienia
emojicompat
z uprawnieniemAppCompat
lub bez niego. Sprawdź, czy ciąg testowy wyświetla się prawidłowo.- 14.0: 🫠, 🫱🏼 🫲🏿, 🫰🏽
- 13.1: 😶 🌫️, 🧔🏻 ♀️, 🧑🏿 ❤️ 🧑🏾
- 13.0: 🥲, 🥷🏿, 🐻 ☕️
- 12.1: 🧑🏻 🦰, 🧑🏿 🦯, 👩🏻 🤝 👩🏼
- 12.0: 🦩, 🦻🏿, 👩🏼 🤝 👩🏻
Wpływ automatycznej konfiguracji emojiCompat
System stosuje domyślną konfigurację za pomocą biblioteki startowej,
EmojiCompatInitializer
i
DefaultEmojiCompatConfig
Po wznowieniu pierwszej aktywności w aplikacji inicjator zaplanuje emotikon podczas wczytywania czcionki. Dzięki temu krótkiemu opóźnieniu aplikacja może wyświetlić początkową zawartość bez wszelkie potencjalne opóźnienia wynikające z wczytywania czcionki w wątku w tle.
DefaultEmojiCompatConfig
szuka zainstalowanej w systemie czcionki do pobrania
dostawca używający interfejsu EmojiCompat
, np. Google Play
usług Google. Na urządzeniach z Usługami Google Play czcionka jest wczytywana za pomocą
Usługi Google Play.
Inicjator tworzy wątek w tle, aby wczytać czcionkę i czcionkę emotikonu.
Pobieranie może potrwać do 10 sekund. Po czcionki
pobieranie trwa około 150 milisekund.
zainicjuj interfejs EmojiCompat
.
Opóźnij inicjalizację funkcji EmojiCompat
, nawet jeśli ją wyłączysz
EmojiCompatInitializer
Jeśli ręcznie skonfigurujesz
EmojiCompat
, wywołaj EmojiCompat.load()
po jego wyświetleniu
pierwszy ekran aplikacji, aby uniknąć rywalizacji w tle
wczytanie ekranu.
Po załadowaniu aplikacja EmojiCompat
wykorzystuje około 300 KB pamięci RAM na emotikona
metadanych.