Biblioteka pomocy EmojiCompat
ma na celu
Zadbaj o to, by urządzenia z Androidem zawierały najnowsze emotikony. Uniemożliwia to aplikacji
brakujące znaki z emotikonu w formacie ☐, co
oznacza, że na urządzeniu nie ma czcionki służącej do wyświetlania tekstu. Według
w bibliotece pomocy EmojiCompat
,
użytkownicy aplikacji nie muszą czekać na aktualizacje systemu operacyjnego Android,
emotikon.
![Urządzenia wyświetlające emotikony](https://developer.android.com/static/guide/topics/ui/images/look-and-feel/emoji-compat/emoji-comparison.png?authuser=19&hl=pl)
Zapoznaj się z tymi powiązanymi materiałami:
Jak działa emojiCompat?
Biblioteka pomocy EmojiCompat
zapewnia
klas do wdrożenia wstecznej obsługi emotikonów na urządzeniach z
Android 4.4 (poziom interfejsu API 19) lub nowszy. Możesz skonfigurować
EmojiCompat
w pakiecie lub
dostępne do pobrania czcionki. Więcej informacji o konfiguracji znajdziesz tutaj:
w tych sekcjach:
EmojiCompat
identyfikuje emotikon w danym przypadku
CharSequence
, zastępuje je na
EmojiSpans
, jeśli jest wymagany, oraz
na koniec renderuje glify emotikonów. Rys. 2 przedstawia cały proces.
![Proces kompilacji emotikonów](https://developer.android.com/static/guide/topics/ui/images/look-and-feel/emoji-compat/architecture.png?authuser=19&hl=pl)
Konfiguracja czcionek do pobrania
Konfiguracja czcionek do pobrania korzysta z obsługi czcionek do pobrania
Biblioteka, aby pobrać czcionkę z emotikonami. Aktualizuje też niezbędne informacje
metadanych emotikonu, które EmojiCompat
biblioteka pomocy musi być na bieżąco z najnowszymi wersjami Unicode
specyfikacji.
Dodawanie zależności biblioteki pomocy
Aby korzystać z biblioteki pomocy EmojiCompat
,
musisz zmienić zależności ścieżki klasy projektu aplikacji w
w środowisku programistycznym.
Aby dodać bibliotekę pomocy do projektu aplikacji:
- Otwórz plik
build.gradle
swojej aplikacji. - Dodaj bibliotekę pomocy do sekcji
dependencies
.
Odlotowe
dependencies { ... implementation "androidx.emoji:emoji:28.0.0" }
Kotlin
dependencies { ... implementation("androidx.emoji:emoji:28.0.0") }
Inicjowanie czcionki do pobrania konfiguracja
Musisz zainicjować usługę EmojiCompat
, aby
należy załadować metadane i krój czcionki. Inicjowanie może trochę potrwać,
proces inicjowania jest uruchomiony w wątku w tle.
Aby zainicjować interfejs EmojiCompat
za pomocą funkcji
aby pobrać konfigurację czcionek, wykonaj te czynności:
- Tworzenie instancji instancji
FontRequest
i podaj urząd dostawcy czcionek, jego pakiet, kwerendę czcionki oraz listę zestawów haszy dla certyfikatu. Więcej informacje o:FontRequest
, zapoznaj się do Automatyczne korzystanie z czcionek do pobrania w sekcji Czcionki do pobrania. dokumentacji. - Utwórz instancję
FontRequestEmojiCompatConfig
i dostarcz wystąpieniaContext
orazFontRequest
- Zainicjuj funkcję
EmojiCompat
, wywołując metodęinit()
i przekazywać instancjęFontRequestEmojiCompatConfig
- Używaj widżetów
EmojiCompat
w układzie Pliki XML. Jeśli korzystasz zAppCompat
, zapoznaj się z Korzystanie z widżetów emojiCompat w aplikacji AppCompat .
Kotlin
class MyApplication : Application() { override fun onCreate() { super.onCreate() val fontRequest = FontRequest( "com.example.fontprovider", "com.example", "emoji compat Font Query", CERTIFICATES ) val config = FontRequestEmojiCompatConfig(this, fontRequest) EmojiCompat.init(config) } }
Java
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); FontRequest fontRequest = new FontRequest( "com.example.fontprovider", "com.example", "emoji compat Font Query", CERTIFICATES); EmojiCompat.Config config = new FontRequestEmojiCompatConfig(this, fontRequest); EmojiCompat.init(config); } }
<android.support.text.emoji.widget.EmojiTextView android:layout_width="wrap_content" android:layout_height="wrap_content"/> <android.support.text.emoji.widget.EmojiEditText android:layout_width="wrap_content" android:layout_height="wrap_content"/> <android.support.text.emoji.widget.EmojiButton android:layout_width="wrap_content" android:layout_height="wrap_content"/>
Więcej informacji o konfigurowaniu
EmojiCompat
z czcionką do pobrania
konfiguracja, otwórz aplikację przykładową zgodności emotikonów
Java
| Kotlin.
Komponenty biblioteki
![Komponenty biblioteki w procesie emojiCompat](https://developer.android.com/static/guide/topics/ui/images/look-and-feel/emoji-compat/basic-components.png?authuser=19&hl=pl)
- Widżety:
EmojiEditText
,EmojiTextView
,EmojiButton
- Domyślne implementacje widżetów
EmojiCompat
zTextView
,EditText
iButton
. EmojiCompat
- Główna platforma publiczna biblioteki pomocy. Wykonuje wszystkie połączenia zewnętrzne i współrzędne z innymi częściami systemu.
EmojiCompat.Config
- Konfiguruje instancję usługi typu singleton do utworzenia.
EmojiSpan
- Podklasa
ReplacementSpan
, która zastępuje (sekwencje) i renderuje glif. - Czcionka:
EmojiCompat
EmojiCompat
używa czcionki do wyświetlania emotikon. To jest zmodyfikowana wersja czcionki Czcionka emotikonów Androida. Czcionka jest modyfikowana w ten sposób:- Aby zapewnić zgodność wsteczną do renderowania emotikonów, wszystkie emotikony są reprezentowane przez jeden punkt kodowy Unicode w Dodatkowy obszar do prywatnego użytku Unicode na poziomie U+F0001.
-
Dodatkowe metadane emotikonów są wstawiane w formacie binarnym do czcionki
jest analizowany w czasie działania przez
EmojiCompat
Dane są w nim umieszczone w tabelimeta
czcionki, z tagiem prywatnym Emji
Opcje konfiguracji
Za pomocą instancji EmojiCompat
można:
zmienić działanie EmojiCompat
. Za pomocą
te metody z klasy bazowej, aby ustawić konfigurację:
setReplaceAll()
: Określa, czy elementEmojiCompat
powinien zastąp wszystkie znalezione emotikonyEmojiSpans
DomyślnieEmojiCompat
dokłada wszelkich starań, aby czy system może renderować emotikon i nie zastępuje go; emotikon. Gdy ustawisz wartośćtrue
,EmojiCompat
zastępuje wszystkie znalezione emotikony dzięki funkcjiEmojiSpans
.setEmojiSpanIndicatorEnabled()
: wskazuje, czyEmojiCompat
zastąpił(a) emotikonemEmojiSpan
Gdy ustawisz wartośćtrue
,EmojiCompat
rysuje tło dlaEmojiSpan
Ta metoda jest wykorzystywana głównie do debugowania.setEmojiSpanIndicatorColor()
: Ustawia kolorEmojiSpan
. Wartością domyślną jestGREEN
.registerInitCallback
: Informuje aplikację o stanie InicjalizacjaEmojiCompat
.
Kotlin
val config = FontRequestEmojiCompatConfig(...) .setReplaceAll(true) .setEmojiSpanIndicatorEnabled(true) .setEmojiSpanIndicatorColor(Color.GREEN) .registerInitCallback(object: EmojiCompat.InitCallback() { ... })
Java
EmojiCompat.Config config = new FontRequestEmojiCompatConfig(...) .setReplaceAll(true) .setEmojiSpanIndicatorEnabled(true) .setEmojiSpanIndicatorColor(Color.GREEN) .registerInitCallback(new InitCallback() {...})
Dodawanie detektorów inicjowania
EmojiCompat
i
EmojiCompat
zajęć
podaj
registerInitCallback()
oraz
unregisterInitCallback()
do zarejestrowania wywołania zwrotnego inicjowania. Aby używać tych metod, utwórz
wystąpienia
EmojiCompat.InitCallback
zajęcia. Zadzwoń do nas
i przekazywać wystąpienie
EmojiCompat.InitCallback
zajęcia. Gdy
zainicjowanie obsługi EmojiCompat
, EmojiCompat
klasa nazywa
onInitialized()
. Jeśli biblioteka
nie można zainicjować, EmojiCompat
klasa nazywa
onFailed()
.
Aby sprawdzić stan inicjowania w dowolnym momencie, wywołaj funkcję
getLoadState()
. Zwraca jedną z tych wartości:
LOAD_STATE_LOADING
,
LOAD_STATE_SUCCEEDED
,
lub LOAD_STATE_FAILED
.
Używanie emojiCompat z widżetami AppCompat
Jeśli korzystasz z AppCompat widgets
,
można używać EmojiCompat
widżetów, które rozszerzają
od AppCompat widgets
.
- Dodaj bibliotekę pomocy do sekcji zależności.
Odlotowe
dependencies { ... implementation "androidx.emoji:emoji-bundled:$version" }
Kotlin
dependencies { implementation("androidx.emoji:emoji-appcompat:$version") }
Odlotowe
dependencies { implementation "androidx.emoji:emoji-appcompat:$version" }
- Użyj formatu:
EmojiCompat
Widżety (AppCompat Widget
) w układzie Pliki XML.
<android.support.text.emoji.widget.EmojiAppCompatTextView android:layout_width="wrap_content" android:layout_height="wrap_content"/> <android.support.text.emoji.widget.EmojiAppCompatEditText android:layout_width="wrap_content" android:layout_height="wrap_content"/> <android.support.text.emoji.widget.EmojiAppCompatButton android:layout_width="wrap_content" android:layout_height="wrap_content"/>
Konfiguracja czcionek w pakiecie
Biblioteka pomocy EmojiCompat
jest też
są dostępne w ramach pakietu wersji czcionek. Pakiet ten zawiera czcionkę ze znakiem
umieszczone metadane. W skład pakietu wchodzą również:
BundledEmojiCompatConfig
który do wczytywania metadanych używa AssetManager
i czcionki.
Uwaga: czcionka jest wielokrotnością rozmiaru megabajtów.
Dodawanie zależności biblioteki pomocy
Korzystanie z biblioteki pomocy EmojiCompat
z pakietem konfiguracji czcionek musisz zmodyfikować
ścieżki klasy w środowisku programistycznym.
Aby dodać bibliotekę pomocy do projektu aplikacji:
- Otwórz plik
build.gradle
swojej aplikacji. - Dodaj bibliotekę pomocy do sekcji
dependencies
.
Odlotowe
dependencies { ... implementation "androidx.emoji:emoji:28.0.0" }
Kotlin
dependencies { ... implementation("androidx.emoji:emoji:28.0.0") }
Korzystanie z pakietów czcionek w celu skonfigurowania emotikonaCompat
Korzystanie z pakietów czcionek do konfigurowania
EmojiCompat
, wykonaj te czynności:
- Użyj formatu:
BundledEmojiCompatConfig
aby utworzyć instancjęEmojiCompat
i podaj instancjęContext
. - Wywołaj funkcję
init()
metoda inicjowaniaEmojiCompat
i przekazać wystąpienieBundledEmojiCompatConfig
Kotlin
class MyApplication : Application() { override fun onCreate() { super.onCreate() val config = BundledEmojiCompatConfig(this) EmojiCompat.init(config) } }
Java
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); EmojiCompat.Config config = new BundledEmojiCompatConfig(this); EmojiCompat.init(config); ... } }
Korzystanie z Emotikonów bez widżetów
Zastosowania: EmojiCompat
EmojiSpan
, aby renderować prawidłowe obrazy.
Dlatego musi przekonwertować określony element CharSequence
na
Spanned
instancja z
EmojiSpans
Klasa EmojiCompat
udostępnia metodę
przekonwertuj CharSequences
na
Spanned
instancji z
EmojiSpans
Przy użyciu tej metody
możesz przetworzyć i buforować przetworzone instancje zamiast nieprzetworzonego ciągu znaków,
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 edytorze IME
Korzystając z biblioteki pomocy EmojiCompat
,
klawiatury mogą renderować emotikony obsługiwane przez daną aplikację
z którymi wchodzimy w interakcje. Edytor IME może używać metody
hasEmojiGlyph()
Metoda sprawdzania, czy EmojiCompat
może
z renderowaniem emotikonów. Ta metoda zajmuje CharSequence
emotikon i zwraca true
, jeśli
EmojiCompat
może wykryć i wyświetlić
emotikon.
Klawiatura może też sprawdzić wersję
EmojiCompat
obsługuje bibliotekę obsługiwaną przez aplikację
pozwala określić emotikon do wyrenderowania w palecie. Aby sprawdzić
jeśli jest dostępna, klawiatura musi sprawdzić, czy
Klucze znajdują się w
EditorInfo.extras
pakiet:
EDITOR_INFO_METAVERSION_KEY
EDITOR_INFO_REPLACE_ALL_KEY
Jeśli klucz znajduje się w pakiecie, wartość reprezentuje
wersji metadanych emotikonów używanych przez aplikację. Jeśli ten klucz nie
oznacza, że aplikacja nie korzysta z EmojiCompat
.
Jeśli klucz istnieje i ma wartość true
, oznacza to, że
aplikacja nazywa się
SetReplaceAll()
. Więcej informacji na temat:
EmojiCompat
– konfiguracja,
zapoznaj się z opcjami konfiguracji.
.
Po otrzymaniu kluczy do
pakiet EditorInfo.extras
,
klawiatura może używać
hasEmojiGlyph()
gdzie metadataVersion
jest wartością dla argumentu
EDITOR_INFO_METAVERSION_KEY
,
aby sprawdzić, czy aplikacja może renderować konkretny emotikon.
Korzystanie z emojiCompat z niestandardowymi widżetami
W każdej chwili możesz użyć usługi process()
do wstępnego przetworzenia CharSequence
w aplikacji i dodania
do dowolnego widżetu, który może renderować instancje Spanned
; w przypadku
przykład: TextView
. Ponadto
EmojiCompat
udostępnia ten widżet
klas pomocniczych, które pozwalają wzbogacić niestandardowe widżety o obsługę emotikonów.
minimalny nakład pracy.
- Przykładowy TextView
- Przykładowy tekst EditText
Kotlin
class MyTextView(context: Context) : AppCompatTextView(context) { private val emojiTextViewHelper: EmojiTextViewHelper by lazy(LazyThreadSafetyMode.NONE) { EmojiTextViewHelper(this).apply { updateTransformationMethod() } } override fun setFilters(filters: Array<InputFilter>) { super.setFilters(emojiTextViewHelper.getFilters(filters)) } override fun setAllCaps(allCaps: Boolean) { super.setAllCaps(allCaps) emojiTextViewHelper.setAllCaps(allCaps) } }
Java
public class MyTextView extends AppCompatTextView { ... public MyTextView(Context context) { super(context); init(); } ... private void init() { getEmojiTextViewHelper().updateTransformationMethod(); } @Override public void setFilters(InputFilter[] filters) { super.setFilters(getEmojiTextViewHelper().getFilters(filters)); } @Override public void setAllCaps(boolean allCaps) { super.setAllCaps(allCaps); getEmojiTextViewHelper().setAllCaps(allCaps); } private EmojiTextViewHelper getEmojiTextViewHelper() { ... } }
Kotlin
class MyEditText(context: Context) : AppCompatEditText(context) { private val emojiEditTextHelper: EmojiEditTextHelper by lazy(LazyThreadSafetyMode.NONE) { EmojiEditTextHelper(this).also { super.setKeyListener(it.getKeyListener(keyListener)) } } override fun setKeyListener(input: KeyListener?) { input?.also { super.setKeyListener(emojiEditTextHelper.getKeyListener(it)) } } override fun onCreateInputConnection(outAttrs: EditorInfo): InputConnection { val inputConnection: InputConnection = super.onCreateInputConnection(outAttrs) return emojiEditTextHelper.onCreateInputConnection( inputConnection, outAttrs ) as InputConnection } }
Java
public class MyEditText extends AppCompatEditText { ... public MyEditText(Context context) { super(context); init(); } ... private void init() { super.setKeyListener(getEmojiEditTextHelper().getKeyListener(getKeyListener())); } @Override public void setKeyListener(android.text.method.KeyListener keyListener) { super.setKeyListener(getEmojiEditTextHelper().getKeyListener(keyListener)); } @Override public InputConnection onCreateInputConnection(EditorInfo outAttrs) { InputConnection inputConnection = super.onCreateInputConnection(outAttrs); return getEmojiEditTextHelper().onCreateInputConnection(inputConnection, outAttrs); } private EmojiEditTextHelper getEmojiEditTextHelper() { ... } }
Najczęstsze pytania
- Jak rozpocząć pobieranie czcionek?
- Ile czasu zajmuje inicjowanie? .
- Ile pamięci używa biblioteka emotikonów obsługiwana?
- Czy mogę używać emojiCompat jako niestandardowego obiektu TextView?
- Co się stanie, jeśli dodam widżety w plikach XML układu na urządzeniach, które działać na Androidzie 4.4 (poziom interfejsu API 19) lub starszym?
Czcionki emotikonów są pobierane przy pierwszym żądaniu, jeśli nie istnieją na urządzeniu. Harmonogram pobierania jest widoczny dla aplikacji.
Pobranie czcionki zajmuje około 150 milisekund.
aby zainicjować EmojiCompat
.
Obecnie struktura danych potrzebnych do znalezienia emotikona jest wczytywana na karcie i zużywa około 200 KB.
Tak. emojiCompat udostępnia klasy pomocnicze do niestandardowych widżetów. Jest także
można wstępnie przetworzyć dany ciąg i przekonwertować go na
Spanned
Aby uzyskać więcej informacji o Asystencie widżetów
klas, zapoznaj się z
Używanie emojiCompat z niestandardowymi widżetami
.
Możesz użyć tych informacji: EmojiCompat
obsługa biblioteki lub jej widżetów w aplikacjach obsługujących urządzenia;
z Androidem 4.4 (poziom interfejsu API 19) lub niższym. Jeśli jednak urządzenie działa
na Androidzie w wersji starszej niż API 19,
Aplikacja EmojiCompat
i jej widżety są w
„brak operacji” stanu. Oznacza to, że
EmojiTextView
działa dokładnie
jak zwykły TextView
.
EmojiCompat
instancja; natychmiast
wpada w
LOAD_STATE_SUCCEEDED
gdy wywołujesz funkcję
init()
.
Dodatkowe materiały
Więcej informacji na temat korzystania z
EmojiCompat
, obejrzyj EmojiCompat.