Korzystaj z nowoczesnych emotikonów

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:

  1. 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"
    
  2. 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 {
    ...
    }
    
  3. 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:

  1. Otwórz Ustawienia w urządzeniu z systemem Android.

  2. Kliknij Aplikacje i powiadomienia.

  3. Kliknij Wyświetl wszystkie aplikacje lub Informacje o aplikacji.

  4. Przewiń listę aplikacji i kliknij Usługi Google Play.

  5. Kliknij Pamięć urządzenia i pamięć podręczna.

  6. 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:

  1. Uruchom to polecenie:

    adb shell dumpsys package com.google.android.gms | grep version
    
  2. 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:

  1. W pliku build.gradle aplikacji umieść emoji2 i emoji2-views.

    build.gradle
    
    def emojiVersion = "1.0.0-alpha03"
    implementation "androidx.emoji2:emoji2:$emojiVersion"
    implementation "androidx.emoji2:emoji2-views:$emojiVersion"
    

    Moduł emoji2-views zapewnia podklasy TextView, Button i EditText, które stosują EmojiCompat. Nie używaj w aplikacji zawierającej dyrektywę AppCompat, ponieważ ma ona już zaimplementowaną EmojiCompat

  2. W pliku XML i kodzie – wszędzie tam, gdzie używasz atrybutów TextView, EditText lub Button – użyj EmojiTextView, EmojiEditText lub EmojiButton.

    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.

  3. 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 z EmojiCompat.
  • EDITOR_INFO_REPLACE_ALL_KEY: jeśli klucz istnieje i jest ustawiony na true, aplikacja konfiguruje EmojiCompat, 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

  1. Dodaj bibliotekę emoji2-views-helper:

    implementation "androidx.emoji2:emoji2-views-helper:$emojiVersion"
    
  2. Postępuj zgodnie z instrukcjami, aby uwzględnić EmojiTextViewHelper lub EmojiEditTextHelper w widokach niestandardowych aplikacji.

  3. 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:

  1. 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>
  2. Wykonaj jedną z tych czynności:

.

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, czy EmojiCompat zastępuje wszystkie znalezione emotikony za pomocą wystąpień z EmojiSpan. Domyślnie, gdy EmojiCompat określi, że system może nie zastąpią emotikona. Gdy ustawisz wartość true, EmojiCompat zastępuje wszystkie emotikony znakami EmojiSpan obiektami.
  • setEmojiSpanIndicatorEnabled(): wskazuje, czy EmojiCompat zastępuje emotikon ikoną EmojiSpan obiektu. Gdy ustawisz wartość true, EmojiCompat będzie rysować tło dla EmojiSpan Ta metoda jest używana głównie do debugowania.
  • setEmojiSpanIndicatorColor: ustawia kolor EmojiSpan. Wartość domyślna to GREEN
  • registerInitCallback(): informuje aplikację o stanie inicjowania funkcji EmojiCompat.

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:

  1. Uwzględnij artefakty emoji2-bundled i emoji2:

    implementation "androidx.emoji2:emoji2:$emojiVersion"
    implementation "androidx.emoji2:emoji2-bundled:$emojiVersion"
    
  2. Skonfiguruj emoji2 tak, aby korzystała z połączonej konfiguracji:

    Kotlin

    EmojiCompat.init(BundledEmojiCompatConfig(context))
    

    Java

    EmojiCompat.init(new BundledEmojiCompatConfig(context));
    
  3. Przetestuj integrację, wykonując poprzednie kroki w celu uwzględnienia emojicompat z uprawnieniem AppCompat 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.