Der Standardsatz an Emojis wird jährlich von Unicode aktualisiert, da die Nutzung von Emojis für alle Arten von Apps rasant zunimmt.
Wenn in deiner App Internetinhalte angezeigt oder Text eingegeben werden kann, empfehlen wir dringend, die neuesten Emoji-Schriftarten zu unterstützen. Andernfalls werden Emojis später möglicherweise als kleines quadratisches Feld namens Tofu (☐) oder andere falsch gerenderte Emoji-Sequenzen angezeigt.
Die Emoji-Schriftart kann unter Android 11 (API-Level 30) und niedriger nicht aktualisiert werden. Apps, in denen diese Emoji-Schriftarten angezeigt werden, müssen daher 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 Bibliothek androidx.emoji2:emoji2
bietet eine einfachere Abwärtskompatibilität mit niedrigeren Android-Versionen. Die emoji2
-Bibliothek ist eine Abhängigkeit von der AppCompat
-Bibliothek und erfordert keine weitere Konfiguration.
Emoji-Unterstützung in „Compose“
BOM März 2023 (Compose UI 1.4) unterstützt die neueste Emoji-Version, einschließlich der Abwärtskompatibilität mit älteren Android-Versionen bis API 21. Auf dieser Seite wird beschrieben, wie Sie moderne Emojis im Ansichtssystem konfigurieren. Weitere Informationen finden Sie auf der Seite Emojis beim Schreiben.
Voraussetzungen
Wenn du prüfen möchtest, ob in deiner App neuere Emojis korrekt angezeigt werden, starte sie auf einem Gerät mit Android 10 (API-Level 29) oder niedriger. Diese Seite enthält moderne Emojis, die Sie zum Testen anzeigen 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 1.4.0-alpha01 oder höher abhängt.build.gradle // Ensure version is 1.4.0-alpha01 or higher. implementation "androidx.appcompat:appcompat.$appcompatVersion"
Achten Sie darauf, dass alle Aktivitäten, die Text anzeigen, die
AppCompatActivity
-Klasse erweitern.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 oder niedriger startest und den folgenden Teststring anzeigst. Achte darauf, dass alle Zeichen korrekt 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, auf denen ein emoji2
-kompatibler herunterladbarer Schriftartenanbieter verfügbar ist, z. B. auf Geräten, die von Google Play-Diensten bereitgestellt werden.
Wenn Ihre App AppCompat verwendet, aber Tofu anzeigt (☐)
In einigen Fällen zeigt deine App möglicherweise Tofu anstelle des richtigen Emojis an, auch wenn du die AppCompat
-Mediathek hinzufügst. Im Folgenden finden Sie mögliche Erklärungen und Lösungen.
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 während des Starts eventuell auftretende Schriftarten im Cache zu speichern. 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 erweitern oder eine Ansicht im Code instanziieren, z. B. TextView
. Überprüfen Sie Folgendes:
- Die Aktivität dauert
AppCompatActivity
. - Wenn Sie die Ansicht im Code erstellen, verwenden Sie die richtige abgeleitete
AppCompat
-Klasse.
AppCompatActivity
bläht beim Aufblähen von XML automatisch AppCompatTextView
anstelle von TextView
auf, sodass Sie Ihre XML-Datei nicht aktualisieren müssen.
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 einem früheren API-Level verwenden, müssen Sie möglicherweise die gebündelten Google Play-Dienste für emoji2
aktualisieren, um den Schriftartanbieter zu finden. Melde dich dazu im Google Play Store im Emulator an.
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 der
versionCode
größer als211200000
ist.
Emojis ohne AppCompat unterstützen
Wenn deine App AppCompat
nicht enthalten kann, kann sie emoji2
direkt verwenden. Dies erfordert mehr Arbeit. Verwenden Sie diese Methode daher nur, wenn Ihre Anwendung 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
enthält abgeleitete Klassen vonTextView
,Button
undEditText
, dieEmojiCompat
implementieren. Verwende sie nicht in einer App, dieAppCompat
enthält, da sieEmojiCompat
bereits implementiert.In XML und Code – überall dort, wo Sie
TextView
,EditText
oderButton
verwenden – verwenden Sie stattdessenEmojiTextView
,EmojiEditText
oderEmojiButton
.activity_main.xml <androidx.emoji2.widget.EmojiTextView ... /> <androidx.emoji2.widget.EmojiEditText ... /> <androidx.emoji2.widget.EmojiButton ... />
Wenn das Modul
emoji2
eingebunden ist, verwendet das System den herunterladbaren Standardschriftanbieter, um die Emoji-Schriftart kurz nach dem Start der App automatisch zu laden. Eine weitere Konfiguration ist nicht erforderlich.Wenn du die Integration testen möchtest, starte deine App auf einem Gerät mit Android 11 oder niedriger und gib die folgenden Teststrings an. Achte darauf, dass alle Zeichen korrekt gerendert werden.
- 14.0: 🫠, 🫱🏼 🫲🏿, 🫰🏽
- 13.1: 😶 🌫️, 🧔 ♀️, 🧑🏿 ❤️ 🧑🏾
- 13.0: 🥲, 🥷🏿, del ❄️
- 12.1: 🧑 🦰, 🧑🏿 🦯, 🇸🏻 🤝 ep🏼
- 12.0: 🦩, 🦻🏿, 💻🏼 🤝 🚀
EmojiCompat ohne Widgets verwenden
EmojiCompat
verwendet EmojiSpan
, um korrekte Bilder zu rendern. Daher muss jedes CharSequence
-Objekt in ein Spanned
-Objekt mit EmojiSpan
-Objekten konvertiert werden.
Die EmojiCompat-Klasse stellt die Methode process()
zum Konvertieren von CharSequences
in Spanned
-Instanzen bereit. Mit dieser Methode können Sie process()
im Hintergrund aufrufen und die Ergebnisse im Cache speichern, wodurch die Leistung Ihrer App verbessert wird.
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 Emojis rendern, die von der App unterstützt werden, mit der sie interagieren. Eingabemethodeneditoren (IMEs) können die Methode getEmojiMatch()
verwenden, um zu prüfen, ob eine Instanz von EmojiCompat
ein Emoji rendern kann. Diese Methode verwendet ein CharSequence
-Element eines Emojis und gibt true
zurück, wenn EmojiCompat
das Emoji erkennen und rendern kann.
Die Tastatur kann auch die von der App unterstützte Version von EmojiCompat
prüfen, um zu bestimmen, welches Emoji in der Palette gerendert werden soll. Um die Version zu prüfen, kann die Tastatur nach den folgenden Tasten im EditorInfo.extras
-Bundle suchen, falls verfügbar:
EDITOR_INFO_METAVERSION_KEY
: stellt die Version der Emoji-Metadaten dar, die die App verwendet. Wenn dieser Schlüssel nicht vorhanden ist, verwendet die AnwendungEmojiCompat
nicht.EDITOR_INFO_REPLACE_ALL_KEY
: Wenn der Schlüssel vorhanden und auftrue
gesetzt ist, konfiguriert die AppEmojiCompat
so, dass alle Emojis ersetzt werden, auch wenn sie im System vorhanden sind.
Weitere Informationen zum Konfigurieren einer Instanz von EmojiCompat
Emojis in benutzerdefinierten Ansichten verwenden
Wenn Ihre Anwendung benutzerdefinierte Ansichten hat, bei denen es sich um direkte oder indirekte abgeleitete Klassen von TextView
handelt, z. B. Button
, Switch
oder EditText
, und in diesen Ansichten von Nutzern erstellte Inhalte angezeigt werden können, müssen sie jeweils EmojiCompat
implementieren.
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 der Plattformimplementierung. Orientieren Sie sich an der folgenden Tabelle, um die Ansichten in AppCompat
zu erweitern:
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 im Modul emoji2-views-helper
die Hilfsprogramme für die Integration von Ansichten, die für die Verwendung in benutzerdefinierten Ansichten vorgesehen sind. Mit diesen Helfern implementiert die AppCompat
-Bibliothek die Emoji-Unterstützung.
Führen Sie die folgenden Schritte aus, um benutzerdefinierte Ansichten für Apps zu unterstützen, die AppCompat
nicht verwenden.
Fügen Sie die
emoji2-views-helper
-Bibliothek hinzu:implementation "androidx.emoji2:emoji2-views-helper:$emojiVersion"
Folgen Sie der Anleitung, um
EmojiTextViewHelper
oderEmojiEditTextHelper
in die benutzerdefinierten Ansichten Ihrer App aufzunehmen.Teste deine Integration, indem du deine App auf einem Gerät mit Android 10 oder niedriger startest und den folgenden Teststring anzeigst. Achte 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 Anwendung aufgenommen haben, können Sie die in diesem Abschnitt beschriebenen optionalen Funktionen hinzufügen.
Konfiguriere für Emojis2 eine andere Schriftart oder einen herunterladbaren Schriftartanbieter
So konfigurieren Sie emoji2
, um eine andere Schriftart oder einen anderen herunterladbaren Schriftartanbieter zu verwenden:
Deaktivieren Sie
EmojiCompatInitializer
, indem Sie Folgendes in das Manifest einfü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 durch Aufrufen von
DefaultEmojiCompatConfiguration.create(context)
.Erstellen Sie mit
EmojiCompat.Config
eine eigene Konfiguration, um Schriftarten aus einer anderen Quelle zu laden. Diese Klasse bietet mehrere Optionen zum Ändern desEmojiCompat
-Verhaltens, wie im folgenden Abschnitt beschrieben.
EmojiCompat-Verhalten ändern
Sie können eine Instanz von EmojiCompat.Config
verwenden, um das Verhalten von EmojiCompat
zu ändern.
Die wichtigste Konfigurationsoption ist setMetadataLoadStrategy()
. Damit wird festgelegt, wann die Schriftart von EmojiCompat
geladen wird. Die Schriftart wird geladen, sobald EmojiCompat.load()
aufgerufen wird. Dadurch werden alle erforderlichen Downloads ausgelöst. Das System erstellt einen Thread zum Herunterladen von Schriftarten, sofern Ihre Anwendung keinen anbietet.
Mit LOAD_STRATEGY_MANUAL
können Sie steuern, wann EmojiCompat.load()
aufgerufen wird, und LOAD_STRATEGY_DEFAULT
sorgt dafür, dass der Ladevorgang im Aufruf von EmojiCompat.init()
synchron gestartet wird.
Die meisten Apps verwenden LOAD_STRATEGY_MANUAL
, damit sie den Thread und das Timing des Ladens der Schriftart steuern können. Ihre Anwendung muss erst nach der Anzeige des ersten Bildschirms warten, um eine Startlatenz zu vermeiden. EmojiCompatInitializer
befolgt diese Vorgehensweise und verzögert das Laden der Emoji-Schriftart, bis der erste Bildschirm fortgesetzt wird.
Verwenden Sie die folgenden Methoden aus der Basisklasse, um andere Aspekte der Konfiguration festzulegen:
setReplaceAll()
: legt fest, obEmojiCompat
alle gefundenen Emojis durch Instanzen vonEmojiSpan
ersetzt. WennEmojiCompat
abschließt, dass das System ein Emoji rendern kann, wird dieses Emoji standardmäßig nicht ersetzt. Wenntrue
festgelegt ist, ersetztEmojiCompat
alle Emojis durchEmojiSpan
-Objekte.setEmojiSpanIndicatorEnabled()
: gibt an, obEmojiCompat
ein Emoji durch einEmojiSpan
-Objekt ersetzt. Wenn dieser Wert auftrue
gesetzt ist, zeichnetEmojiCompat
einen Hintergrund für dieEmojiSpan
. Diese Methode wird hauptsächlich zur Fehlerbehebung verwendet.setEmojiSpanIndicatorColor
: Hiermit wird die Farbe festgelegt, um einEmojiSpan
anzugeben. Der Standardwert istGREEN
.registerInitCallback()
: Informiert eine App über den Status derEmojiCompat
-Initialisierung.
Initialisierungs-Listener hinzufügen
Die Klassen EmojiCompat
und EmojiCompat.Config
bieten die Methoden registerInitCallback()
und unregisterInitCallback()
zum Registrieren und Aufheben der Registrierung von Initialisierungs-Callbacks. Ihre App wartet mithilfe dieser Callbacks, bis EmojiCompat
initialisiert wurde, bevor Sie Emojis in einem Hintergrundthread oder in einer benutzerdefinierten Ansicht verarbeiten.
Wenn Sie diese Methoden verwenden möchten, müssen Sie eine Instanz der Klasse EmojiCompat.InitCallback
erstellen. Rufen Sie diese Methoden auf und übergeben Sie die Instanz der Klasse EmojiCompat.InitCallback
. Wenn die Initialisierung erfolgreich ist, ruft die Klasse EmojiCompat
die Methode onInitialized()
auf. Wenn die Bibliothek nicht initialisiert werden kann, ruft die Klasse EmojiCompat
die Methode onFailed()
auf.
Sie können den Initialisierungsstatus jederzeit prüfen. Rufen Sie dazu die Methode getLoadState()
auf. 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
kannst du eine Emoji-Schriftart in deiner App bündeln.
Da die Schriftart NotoColorEmoji
jedoch größer als 10 MB ist, empfehlen wir in deiner App dringend, nach Möglichkeit Schriftarten zum Herunterladen zu verwenden. Das Artefakt emoji2-bundled
ist für Apps auf Geräten vorgesehen, die keine herunterladbaren Schriftarten unterstützen.
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 Einbinden von
emojicompat
mit oder ohneAppCompat
ausführen. Prüfen Sie, ob 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 EmojiCompatInitializer
und DefaultEmojiCompatConfig
an.
Nachdem die erste Aktivität in Ihrer App fortgesetzt wird, plant der Initialisierunger das Laden der Emoji-Schriftarten. Durch diese kurze Verzögerung kann Ihre App die ersten Inhalte ohne mögliche Latenz anzeigen, die durch das Laden von Schriftarten in einem Hintergrundthread entstehen könnte.
DefaultEmojiCompatConfig
sucht nach einem vom System installierten herunterladbaren Schriftartenanbieter, der die EmojiCompat
-Schnittstelle implementiert, z. B. Google Play-Dienste. Auf Geräten mit Google Play-Diensten wird die Schriftart mithilfe der Google Play-Dienste geladen.
Der Initialisierer erstellt einen Hintergrundthread, um die Emoji-Schriftart zu laden. Der Download der Schriftart kann bis zu 10 Sekunden dauern, bis eine Zeitüberschreitung auftritt. Nach dem Herunterladen der Schriftart dauert es in einem Hintergrundthread etwa 150 Millisekunden, um EmojiCompat
zu initialisieren.
Die Initialisierung von EmojiCompat
hinauszögern, auch wenn Sie EmojiCompatInitializer
deaktivieren. Wenn du EmojiCompat
manuell konfigurierst, rufe EmojiCompat.load()
auf, nachdem der erste Bildschirm der Anwendung angezeigt wird, um Hintergrundkonflikte beim ersten Laden des Bildschirms zu vermeiden.
Nach dem Laden benötigt EmojiCompat
etwa 300 KB RAM für die Emoji-Metadaten.