Der Standard-Emoji-Satz wird jährlich aktualisiert von Unicode: Die Nutzung von Emojis nimmt zu. für alle Arten von Apps.
Wenn Ihre App Internetinhalte oder Texteingabe anzeigt, empfehlen wir Ihnen dringend, empfehlen, die neuesten Emoji-Schriftarten zu unterstützen. Andernfalls kann es passieren, dass später Wird als kleines quadratisches Feld namens Tofu (☐) oder ein anderes falsch gerendertes Element angezeigt Emoji-Sequenzen.
Unter Android 11 (API-Level 30) und niedriger kann die Emoji-Schriftart nicht aktualisiert werden. Apps, die sie unter diesen Versionen anzeigen, müssen manuell aktualisiert werden.
Hier einige Beispiele für moderne Emojis.
Beispiele | Version |
---|---|
🫠 🫱🏼🫲🏿 🫰🏽 | 14.0 (September 2021) |
😶🌫️ 🧔🏻♀️ 🧑🏿❤️🧑🏾 | 13.1 (September 2020) |
🥲 🥷🏿 🐻❄️ | 13.0 (März 2020) |
🧑🏻🦰 🧑🏿🦯 👩🏻🤝👩🏼 | 12.1 (Oktober 2019) |
🦩 🦻🏿 👩🏼🤝👩🏻 | 12.0 (Februar 2019) |
Die androidx.emoji2:emoji2
-Bibliothek bietet einfachere Abwärtskompatibilität.
mit niedrigeren Android-Versionen. Die emoji2
-Bibliothek ist eine Abhängigkeit von
AppCompat
-Bibliothek und erfordert keine
weitere Konfiguration erforderlich.
Emoji-Unterstützung in „Compose“
BOM März 2023 (Compose UI 1.4) unterstützt die neuesten Emojis einschließlich der Abwärtskompatibilität mit älteren Android-Versionen API 21. Auf dieser Seite wird beschrieben, wie Sie moderne Emojis im Ansichtssystem konfigurieren. Weitere Informationen finden Sie unter unter Emojis auf der Seite „Schreiben“.
Voraussetzungen
Wenn du prüfen möchtest, ob deine App neuere Emojis richtig anzeigt, starte sie auf einem Gerät mit Android 10 (API-Level 29) oder niedriger. Diese Seite enthält moderne Emojis, die du wählst die zum Testen angezeigt werden können.
Die neuesten Emojis mit AppCompat unterstützen
In AppCompat
1.4 werden Emojis unterstützt.
So verwenden Sie AppCompat
zur Unterstützung von Emojis:
Prüfen Sie, ob Ihr Modul von der
AppCompat
-Bibliotheksversion abhängt 1.4.0-alpha01 oder höher liegen.build.gradle // Ensure version is 1.4.0-alpha01 or higher. implementation "androidx.appcompat:appcompat.$appcompatVersion"
Stellen Sie sicher, dass alle Aktivitäten, bei denen Text angezeigt wird, die
AppCompatActivity
.Kotlin
MyActivity.kt class MyActivity: AppCompatActivity { ... }
Java
MyActivity.java class MyActivity extends AppCompatActivity { ... }
Teste deine Integration, indem du deine App auf einem Gerät mit Android 10 startest oder niedriger und die folgende Testzeichenfolge wird angezeigt. Achten Sie darauf, dass alle Zeichen richtig gerendert werden.
- 14.0: 🫠, 🫱🏼 🫲🏿, 🫰🏽
- 13.1: 😶 🌫️, 🧔 ♀️, 🧑🏿 ❤️ 🧑🏾
- 13.0: 🥲, 🥷🏿, del ❄️
- 12.1: 🧑 🦰, 🧑🏿 🦯, 🚀 🤝 ep🏼
- 12.0: 🦩, 🦻🏿, 💻🏼 🤝 🚀
Deine App zeigt automatisch abwärtskompatible Emojis auf allen Geräten an, die
Einen mit emoji2
kompatiblen herunterladbaren Schriftartenanbieter bereitstellen, z. B. Geräte
bereitgestellt durch Google Play-Dienste.
Wenn Ihre App AppCompat verwendet, aber Tofu anzeigt (☐)
In einigen Fällen zeigt Ihre App möglicherweise Tofu anstelle des richtigen Emojis an, selbst wenn
fügen Sie die AppCompat
-Bibliothek hinzu. Im Folgenden finden Sie mögliche Erklärungen
Lösungen zu finden.
Du führst die App auf einem kürzlich geflashten Gerät oder in einem neuen Emulator aus.
Lösche die Daten der Google Play-Dienste der App, um Schriftart-Caching, während des Starts erfolgen. Dadurch wird das Problem in der Regel nach einigen Stunden behoben.
So löschen Sie die App-Daten:
Öffnen Sie die Einstellungen auf Ihrem Android-Gerät.
Tippe auf Apps & Benachrichtigungen.
Tippen Sie auf Alle Apps anzeigen oder App-Info.
Scrollen Sie durch die Apps und tippen Sie auf Google Play-Dienste.
Tippen Sie auf Speicher und Cache.
Tippen Sie auf Cache leeren.
Ihre App verwendet keine textbezogene AppCompat-Klasse
Dies kann passieren, wenn Sie AppCompatActivity
nicht verlängern oder eine
Codeansicht, z. B. TextView
. Überprüfen Sie Folgendes:
- Die Aktivität dauert
AppCompatActivity
. - Wenn Sie die Ansicht im Code erstellen, verwenden Sie die korrekte
AppCompat
abgeleitete Klasse erstellen.
AppCompatActivity
bläht automatisch AppCompatTextView
auf anstelle von
TextView
ein, wenn du XML-Daten aufblähst. Du musst deine XML-Datei also nicht aktualisieren.
Das Testtelefon unterstützt keine herunterladbaren Schriftarten
Prüfen Sie, ob DefaultEmojiCompatConfig.create
eine Konfiguration ungleich Null zurückgibt.
Ein Emulator auf einer früheren API-Ebene hat die Google Play-Dienste nicht aktualisiert
Wenn Sie einen Emulator auf einer früheren API-Ebene verwenden, müssen Sie möglicherweise den
Google Play-Dienste für emoji2
gebündelt, um den Schriftartanbieter zu finden. Gehen Sie dazu wie folgt vor:
im Google Play Store im Emulator anmelden.
So überprüfen Sie, ob eine kompatible Version installiert ist:
Führen Sie den folgenden Befehl aus:
adb shell dumpsys package com.google.android.gms | grep version
Prüfen Sie, ob
versionCode
größer als211200000
ist.
Emojis ohne AppCompat unterstützen
Wenn deine App AppCompat
nicht enthalten kann, kann sie emoji2
direkt verwenden. Dieses
erfordert mehr Arbeit. Verwenden Sie diese Methode daher nur, wenn Ihre App AppCompat
nicht verwenden kann.
So kannst du Emojis ohne die AppCompat
-Mediathek unterstützen:
Füge in die Datei
build.gradle
deiner Appemoji2
undemoji2-views
ein.build.gradle def emojiVersion = "1.0.0-alpha03" implementation "androidx.emoji2:emoji2:$emojiVersion" implementation "androidx.emoji2:emoji2-views:$emojiVersion"
Das Modul
emoji2-views
bietet abgeleitete Klassen vonTextView
,Button
undEditText
, die implementieren,EmojiCompat
Nicht verwenden in einer App, dieAppCompat
enthält, da sie bereitsEmojiCompat
.In XML und Code – überall dort, wo Sie
TextView
,EditText
oderButton
– verwendenEmojiTextView
,EmojiEditText
oderEmojiButton
.activity_main.xml <androidx.emoji2.widget.EmojiTextView ... /> <androidx.emoji2.widget.EmojiEditText ... /> <androidx.emoji2.widget.EmojiButton ... />
Durch Einbinden des Moduls
emoji2
verwendet das System das standardmäßig herunterladbare Schriftart-Anbieter, um die Emoji-Schriftart automatisch kurz nach dem Start der App. Nein ist eine weitere Konfiguration erforderlich.Wenn du die Integration testen möchtest, starte deine App auf einem Gerät mit Android 11 oder und die folgenden Teststrings anzeigen. Achten Sie darauf, dass alle Zeichen richtig gerendert werden.
- 14.0: 🫠, 🫱🏼 🫲🏿, 🫰🏽
- 13.1: 😶 🌫️, 🧔 ♀️, 🧑🏿 ❤️ 🧑🏾
- 13.0: 🥲, 🥷🏿, del ❄️
- 12.1: 🧑 🦰, 🧑🏿 🦯, 🚀 🤝 ep🏼
- 12.0: 🦩, 🦻🏿, 💻🏼 🤝 🚀
EmojiCompat ohne Widgets verwenden
EmojiCompat
verwendet EmojiSpan
für Folgendes:
korrekte Bilder rendern. Daher muss es alle vorgegebenen
CharSequence
-Objekt in ein
Objekt Spanned
mit EmojiSpan
-Objekten
Die EmojiCompat-Klasse bietet die process()
-Methode zum Konvertieren von CharSequences
in Spanned
Instanzen aufgeteilt. Mit dieser Methode können Sie process()
im
und die Ergebnisse im Cache speichern, was die Leistung Ihrer App verbessert.
Kotlin
val processed = EmojiCompat.get().process("neutral face \uD83D\uDE10")
Java
CharSequence processed = EmojiCompat.get().process("neutral face \uD83D\uDE10");
EmojiCompat für Eingabemethodeneditoren verwenden
Mit der Klasse EmojiCompat
können Tastaturen die von der App unterstützten Emojis rendern
mit denen sie interagieren. Eingabemethoden-Editoren
(IMEs) können die Methode
getEmojiMatch()
um zu prüfen, ob eine Instanz von EmojiCompat
ein
Emoji. Diese Methode verwendet einen CharSequence
eines Emojis und gibt true
zurück, wenn EmojiCompat
das Emoji erkennen und rendern kann.
Die Tastatur kann auch prüfen, welche Version von EmojiCompat
von der App unterstützt wird
um zu bestimmen, welches Emoji in der Palette gerendert werden soll. Um die Version zu prüfen,
kann die Tastatur im Menü
EditorInfo.extras
Set:
EDITOR_INFO_METAVERSION_KEY
: steht für die Version der Emoji-Metadaten, die die App verwendet. Wenn dieser Schlüssel nicht vorhanden ist, verwendet die AppEmojiCompat
nicht.EDITOR_INFO_REPLACE_ALL_KEY
: Ist der Schlüssel vorhanden und auftrue
festgelegt, konfiguriert die AppEmojiCompat
, um alle Emojis zu ersetzen, auch wenn sie im System vorhanden sind.
Weitere Informationen zur Konfiguration einer Instanz von EmojiCompat auf.
Emojis in benutzerdefinierten Ansichten verwenden
Wenn Ihre App über benutzerdefinierte Ansichten verfügt,
direkte oder indirekte abgeleitete Klassen von TextView
, z. B. Button
,
Switch
oder EditText
. Diese Ansichten können von Nutzern generierte
müssen sie alle
EmojiCompat
Der Vorgang hängt davon ab, ob deine App die AppCompat
-Bibliothek verwendet.
Mit AppCompat benutzerdefinierte Ansichten für Apps hinzufügen
Wenn deine App AppCompat
verwendet, erweitere die AppCompat
-Implementierung anstelle von
der Plattformimplementierung. Orientieren Sie sich an der folgenden Tabelle,
Mehr Aufrufe im AppCompat
:
Anstatt... | Erweitern |
---|---|
TextView
|
AppCompatTextView
|
EditText
|
AppCompatEditText
|
ToggleButton
|
AppCompatToggleButton
|
Switch
|
SwitchCompat
|
Button
|
AppCompatButton
|
CheckedTextView
|
AppCompatCheckedTextView
|
RadioButton
|
AppCompatRadioButton
|
CheckBox
|
AppCompatCheckBox
|
AutoCompleteTextView
|
AppCompatAutoCompleteTextView
|
MultiAutoCompleteTextView
|
AppCompatMultiAutoCompleteTextView
|
Benutzerdefinierte Ansichten für Apps ohne AppCompat hinzufügen
Wenn Ihre App AppCompat
nicht verwendet, verwenden Sie die Integrationshilfen für die Ansicht in der
emoji2-views-helper
-Moduls, die für die Verwendung in benutzerdefinierten Ansichten vorgesehen sind. Diese
sind die Helfer, die die AppCompat
-Mediathek zur Implementierung der Emoji-Unterstützung verwendet.
Führen Sie die folgenden Schritte aus, um benutzerdefinierte Ansichten für Apps zu unterstützen, die nicht
AppCompat
Fügen Sie die
emoji2-views-helper
-Bibliothek hinzu:implementation "androidx.emoji2:emoji2-views-helper:$emojiVersion"
Folgen Sie der Anleitung, um
EmojiTextViewHelper
oderEmojiEditTextHelper
in den benutzerdefinierten Ansichten Ihrer App.Teste deine Integration, indem du deine App auf einem Gerät mit Android 10 startest oder niedriger und die folgende Testzeichenfolge wird angezeigt. Achten Sie darauf, dass alle Zeichen korrekt gerendert werden.
- 14.0: 🫠, 🫱🏼 🫲🏿, 🫰🏽
- 13.1: 😶 🌫️, 🧔 ♀️, 🧑🏿 ❤️ 🧑🏾
- 13.0: 🥲, 🥷🏿, del ❄️
- 12.1: 🧑 🦰, 🧑🏿 🦯, 🚀 🤝 ep🏼
- 12.0: 🦩, 🦻🏿, 💻🏼 🤝 🚀
Optionale Funktionen zur Verarbeitung von Emojis2
Nachdem Sie die emoji2
-Bibliothek in Ihre App aufgenommen haben, können Sie die optionale Bibliothek hinzufügen.
die in diesem Abschnitt beschrieben werden.
Konfiguriere für Emojis2 eine andere Schriftart oder einen herunterladbaren Schriftartanbieter
So konfigurieren Sie emoji2
für die Verwendung einer anderen Schriftart oder eines herunterladbaren Schriftartanbieters:
Folgendes:
Deaktivieren Sie die
EmojiCompatInitializer
indem Sie Ihrem Manifest Folgendes hinzufügen:<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>
Führen Sie einen der folgenden Schritte aus:
Verwenden Sie die Standardkonfiguration, indem Sie
DefaultEmojiCompatConfiguration.create(context)
Erstellen Sie Ihre eigene Konfiguration zum Laden von Schriftarten aus einer anderen Quelle mithilfe von
EmojiCompat.Config
Diese Klasse bietet mehrere Optionen zum Ändern vonEmojiCompat
wie im folgenden Abschnitt beschrieben.
EmojiCompat-Verhalten ändern
Sie können eine Instanz von EmojiCompat.Config
verwenden, um EmojiCompat
zu ändern
verhalten.
Die wichtigste Konfigurationsoption ist
setMetadataLoadStrategy()
,
legt fest, wann EmojiCompat
die Schriftart lädt. Die Schriftart wird geladen, sobald
EmojiCompat.load()
wird aufgerufen, wodurch alle erforderlichen Downloads ausgelöst werden. Die
erstellt ein Thread zum Herunterladen von Schriftarten, es sei denn, Ihre App bietet einen.
Mit LOAD_STRATEGY_MANUAL
können Sie festlegen, wann EmojiCompat.load()
aufgerufen wird, und
LOAD_STRATEGY_DEFAULT
der Ladevorgang startet synchron.
EmojiCompat.init()
Die meisten Apps verwenden LOAD_STRATEGY_MANUAL
, um Thread und Timing steuern zu können
für das Laden von Schriftarten. Ihre App muss erst nach der Anzeige des ersten Bildschirms
ohne Startlatenz zu vermeiden. EmojiCompatInitializer
folgt diesen Inhalten
das Laden der Emoji-Schriftart, bis der erste Bildschirm fortgesetzt wird.
Verwenden Sie die folgenden Methoden aus der Basisklasse, um andere Aspekte der Konfiguration:
setReplaceAll()
: legt fest, obEmojiCompat
alle gefundenen Emojis durch Instanzen ersetzt vonEmojiSpan
. WennEmojiCompat
standardmäßig abschließt, dass das System ein Emoji rendert, ersetzt es dieses Emoji nicht. Wenntrue
festgelegt ist, gilt Folgendes:EmojiCompat
ersetzt alle Emojis durchEmojiSpan
-Objekte.setEmojiSpanIndicatorEnabled()
: gibt an, obEmojiCompat
ein Emoji durch einEmojiSpan
-Element ersetzt -Objekt enthält. Wenn die Richtlinie auftrue
gesetzt ist, zeichnetEmojiCompat
einen Hintergrund für dasEmojiSpan
Diese Methode wird hauptsächlich zur Fehlerbehebung verwendet.setEmojiSpanIndicatorColor
: legt die Farbe fest, um eineEmojiSpan
anzuzeigen. Der Standardwert istGREEN
registerInitCallback()
: Informiert eine App über den Status derEmojiCompat
-Initialisierung.
Initialisierungs-Listener hinzufügen
Die Klassen EmojiCompat
und EmojiCompat.Config
stellen die
registerInitCallback()
und
unregisterInitCallback()
Methoden zum Registrieren und Aufheben der Registrierung von Initialisierungs-Callbacks. Deine App verwendet diese
Callbacks, die gewartet werden sollen, bis EmojiCompat
initialisiert wurde, bevor du ein Emoji verarbeitest unter
eines Hintergrundthreads oder in einer benutzerdefinierten Ansicht.
Erstellen Sie zur Verwendung dieser Methoden eine Instanz des
EmojiCompat.InitCallback
. Rufen Sie diese Methoden auf und übergeben Sie die Instanz der
Klasse EmojiCompat.InitCallback
. Wenn die Initialisierung erfolgreich ist,
EmojiCompat
ruft die Klasse
onInitialized()
. Wenn die Bibliothek nicht initialisiert werden kann, ruft die EmojiCompat
-Klasse die
onFailed()
.
Um den Initialisierungsstatus zu überprüfen, rufen Sie die Methode
getLoadState()
. Diese Methode gibt einen der folgenden Werte zurück:
LOAD_STATE_LOADING
,
LOAD_STATE_SUCCEEDED
,
oder
LOAD_STATE_FAILED
Gebündelte Schriftarten mit Emojis unterstützen2
Mit dem Artefakt emoji2-bundled
können Sie eine Emoji-Schriftart in Ihrer App bündeln.
Da die Schriftart NotoColorEmoji
jedoch größer als 10 MB ist, empfehlen wir
empfehlen, in Ihrer App nach Möglichkeit Schriftarten zum Herunterladen zu verwenden. Die
Das Artefakt emoji2-bundled
ist für Apps auf Geräten vorgesehen, die keine
Schriftarten herunterladen können.
So verwenden Sie das Artefakt emoji2-bundled
:
Artefakte
emoji2-bundled
undemoji2
einschließen:implementation "androidx.emoji2:emoji2:$emojiVersion" implementation "androidx.emoji2:emoji2-bundled:$emojiVersion"
Konfigurieren Sie
emoji2
für die Verwendung der gebündelten Konfiguration:Kotlin
EmojiCompat.init(BundledEmojiCompatConfig(context))
Java
EmojiCompat.init(new BundledEmojiCompatConfig(context));
Testen Sie die Integration, indem Sie die vorherigen Schritte zum Einbeziehen
emojicompat
mit oder ohneAppCompat
. Achten Sie darauf, dass der Teststring korrekt angezeigt wird.- 14.0: 🫠, 🫱🏼 🫲🏿, 🫰🏽
- 13.1: 😶 🌫️, 🧔 ♀️, 🧑🏿 ❤️ 🧑🏾
- 13.0: 🥲, 🥷🏿, del ❄️
- 12.1: 🧑 🦰, 🧑🏿 🦯, 🚀 🤝 ep🏼
- 12.0: 🦩, 🦻🏿, 💻🏼 🤝 🚀
Auswirkungen der automatischen EmojiCompat-Konfiguration
Das System wendet die Standardkonfiguration
mithilfe der Startbibliothek an,
EmojiCompatInitializer
und
DefaultEmojiCompatConfig
Nachdem die erste Aktivität in Ihrer App fortgesetzt wird, plant der Initialisierer das Emoji. Schriftart wird geladen. Durch diese kurze Verzögerung kann Ihre App den ursprünglichen Inhalt ohne mögliche Latenz aufgrund des Ladens von Schriftarten in einem Hintergrundthread.
DefaultEmojiCompatConfig
sucht nach einer vom System installierten Schriftart zum Herunterladen
Anbieter, der die EmojiCompat
-Schnittstelle implementiert, z. B. Google Play
. Auf Geräten mit Google Play-Diensten wird die Schriftart mit
Google Play-Dienste.
Der Initialisierer erstellt einen Hintergrundthread, um die Emoji-Schriftart und -Schriftart zu laden.
Es kann bis zu 10 Sekunden dauern, bis eine Zeitüberschreitung auftritt. Nachdem die Schriftart
heruntergeladen wird, dauert es etwa 150 Millisekunden, bis ein Hintergrundthread
Initialisieren Sie EmojiCompat
.
Initialisierung von EmojiCompat
aufschieben, auch wenn du Folgendes deaktivierst
EmojiCompatInitializer
. Wenn Sie die Einstellungen manuell
EmojiCompat
, rufen Sie EmojiCompat.load()
auf, nachdem es angezeigt wird
den ersten Bildschirm der App, um Hintergrundkonflikte mit dem ersten Bildschirm zu vermeiden.
Bildschirm zu laden.
Nach dem Laden benötigt EmojiCompat
etwa 300 KB RAM, um das Emoji zu speichern
Metadaten.