Der Standardsatz an Emojis wird jährlich von Unicode aktualisiert, da die Nutzung von Emojis für alle Arten von Apps rasant zunimmt.
Wenn Ihre App Internetinhalte anzeigt oder eine Texteingabe ermöglicht, empfehlen wir dringend, die neuesten Emoji-Schriftarten zu unterstützen. Andernfalls werden spätere Emojis möglicherweise als kleines quadratisches Kästchen namens Tofu (☐) oder andere falsch gerenderte Emoji-Sequenzen angezeigt.
Bei Android-Versionen 11 (API-Level 30) und niedriger kann die Emoji-Schriftart nicht aktualisiert werden. Apps, in denen Emojis in diesen Versionen angezeigt werden, müssen daher manuell aktualisiert werden.
Im Folgenden finden Sie 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 im Verfassen von Nachrichten
Die BOM vom März 2023 (Compose UI 1.4) unterstützt die neueste Emoji-Version und ist abwärtskompatibel mit älteren Android-Versionen bis API 21. Auf dieser Seite erfahren Sie, wie Sie moderne Emojis im View-System konfigurieren. Weitere Informationen finden Sie auf der Seite Emojis beim Schreiben.
Voraussetzungen
Wenn Sie prüfen möchten, ob neuere Emojis in Ihrer App richtig angezeigt werden, starten Sie 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.
AppCompat verwenden, um die neuesten Emojis zu unterstützen
AppCompat
1.4 unterstützt Emojis.
So verwenden Sie AppCompat
, um Emojis zu unterstützen:
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 { ... }
Testen Sie die Integration, indem Sie Ihre App auf einem Gerät mit Android 10 oder niedriger starten und den folgenden Teststring anzeigen. Achte darauf, dass alle Zeichen korrekt gerendert werden.
- 14.0: 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1: 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0: 🥲, 🥷🏿, Portierung ❄️
- 12.1: 🧑🏻🦰, 🧑🏿🦯, 👩🏻🤝👩🏼
- 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“ (☐) angezeigt wird
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.
Sie führen die App auf einem kürzlich geflashten Gerät oder einem neuen Emulator aus.
Löschen Sie die Daten der Google Play-Dienste der App, um den Schriftarten-Cache zu leeren, der beim Starten möglicherweise erstellt wird. In der Regel wird das Problem dadurch nach einigen Stunden behoben.
So löschen Sie die App-Daten:
Öffnen Sie auf Ihrem Android-Gerät die Einstellungen.
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 AppCompat-Textklasse
Das 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
AppCompat
-Unterklasse.
AppCompatActivity
ersetzt beim Aufblähen von XML automatisch AppCompatTextView
anstelle von TextView
, sodass Sie Ihre XML-Datei nicht aktualisieren müssen.
Das Testgerät unterstützt keine herunterladbaren Schriftarten
Prüfen Sie, ob DefaultEmojiCompatConfig.create
eine nicht nullwertige Konfiguration zurückgibt.
Ein Emulator mit einer früheren API-Ebene hat die Google Play-Dienste nicht aktualisiert
Wenn Sie einen Emulator mit einer früheren API-Ebene verwenden, müssen Sie möglicherweise die im Lieferumfang enthaltenen Google Play-Dienste für emoji2
aktualisieren, damit der Schriftanbieter gefunden wird. 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
versionCode
höher als211200000
ist.
Emojis ohne AppCompat unterstützen
Wenn Ihre 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ügen Sie in der Datei
build.gradle
Ihrer 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 Unterklassen 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 Sie das
emoji2
-Modul einschließen, verwendet das System den Standardanbieter für herunterladbare Schriftarten, 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. Achten Sie darauf, dass alle Zeichen korrekt dargestellt werden.
- 14.0: 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1: 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0: 🥲, 🥷🏿, Portierung ❄️
- 12.1: 🧑🏻🦰, 🧑🏿🦯, 👩🏻🤝👩🏼
- 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 umgewandelt werden.
Die EmojiCompat-Klasse bietet die Methode process()
, mit der CharSequences
-Objekte in Spanned
-Instanzen umgewandelt werden können. 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 von der App unterstützten Emojis rendern, mit der sie interagieren. Eingabemethoden-Editoren (IMEs) können mit der Methode getEmojiMatch()
prüfen, ob eine Instanz von EmojiCompat
ein Emoji rendern kann. Diese Methode nimmt eine CharSequence
eines Emojis als Eingabe und gibt true
zurück, wenn EmojiCompat
das Emoji erkennen und rendern kann.
Die Tastatur kann auch die von der App unterstützte EmojiCompat
-Version prüfen, um zu ermitteln, welche Emojis in der Palette gerendert werden sollen. Um die Version zu prüfen, kann die Tastatur nach den folgenden Tasten im EditorInfo.extras
-Bundle suchen:
EDITOR_INFO_METAVERSION_KEY
: Representiert die Version der Emoji-Metadaten, die von der App verwendet wird. Wenn dieser Schlüssel nicht vorhanden ist, verwendet die AppEmojiCompat
nicht.EDITOR_INFO_REPLACE_ALL_KEY
: Wenn der Schlüssel vorhanden ist und auftrue
festgelegt 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 App benutzerdefinierte Ansichten enthält, die direkte oder indirekte Unterklassen von TextView
sind (z. B. Button
, Switch
oder EditText
) und in denen von Nutzern erstellte Inhalte angezeigt werden können, muss in jeder dieser Ansichten EmojiCompat
implementiert sein.
Der Vorgang variiert je nachdem, ob Ihre 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. In der folgenden Tabelle finden Sie eine Anleitung zum Erweitern Ihrer Datenansichten in AppCompat
:
Anstatt zu erweitern… | 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 in Ihrer App keine AppCompat
verwendet wird, verwenden Sie die Hilfsfunktionen zur Ansichtsintegration im emoji2-views-helper
-Modul, die für die Verwendung in benutzerdefinierten Ansichten entwickelt wurden. 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.Testen Sie die Integration, indem Sie Ihre App auf einem Gerät mit Android 10 oder niedriger starten und den folgenden Teststring anzeigen. Achten Sie darauf, dass alle Zeichen korrekt dargestellt werden.
- 14.0: 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1: 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0: 🥲, 🥷🏿, Portierung ❄️
- 12.1: 🧑🏻🦰, 🧑🏿🦯, 👩🏻🤝👩🏼
- 12.0: 🦩, 🦻🏿, 👩🏼🤝👩🏻
Optionale Funktionen für die Verarbeitung von Emoji2
Nachdem Sie die emoji2
-Bibliothek in Ihre Anwendung aufgenommen haben, können Sie die in diesem Abschnitt beschriebenen optionalen Funktionen hinzufügen.
emoji2 für die Verwendung einer anderen Schriftart oder eines Anbieters zum Herunterladen von Schriftarten konfigurieren
So konfigurieren Sie emoji2
für die Verwendung einer anderen Schriftart oder eines anderen Anbieters für herunterladbare Schriftarten:
Deaktivieren Sie die
EmojiCompatInitializer
, indem Sie dem 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 durch Aufrufen von
DefaultEmojiCompatConfiguration.create(context)
.Erstellen Sie eine eigene Konfiguration, um Schriftarten mit
EmojiCompat.Config
aus einer anderen Quelle zu laden. Diese Klasse bietet mehrere Optionen zum Ändern desEmojiCompat
-Verhaltens, wie im folgenden Abschnitt beschrieben.
Verhalten von EmojiCompat ändern
Mit einer Instanz von EmojiCompat.Config
können Sie das Verhalten von EmojiCompat
ändern.
Die wichtigste Konfigurationsoption ist setMetadataLoadStrategy()
. Damit wird festgelegt, wann die Schriftart von EmojiCompat
geladen wird. Das Laden der Schriftart beginnt, sobald EmojiCompat.load()
aufgerufen wird. Dadurch werden alle erforderlichen Downloads ausgelöst. Das System erstellt einen Thread für den Schriftartendownload, sofern Ihre App keinen bereitstellt.
Mit LOAD_STRATEGY_MANUAL
kannst du steuern, wann EmojiCompat.load()
aufgerufen wird. Mit LOAD_STRATEGY_DEFAULT
wird das Laden synchron beim Aufruf von EmojiCompat.init()
gestartet.
Die meisten Apps verwenden LOAD_STRATEGY_MANUAL
, um den Thread und das Timing des Schriftartenladens zu steuern. Ihre Anwendung muss verzögert werden, bis der erste Bildschirm angezeigt wird, um eine Startlatenz zu vermeiden. EmojiCompatInitializer
folgt dieser Praxis und verschiebt das Laden der Emoji-Schriftart auf den Zeitpunkt, an dem der erste Bildschirm wieder angezeigt wird.
Verwenden Sie die folgenden Methoden aus der Basisklasse, um andere Aspekte der Konfiguration festzulegen:
setReplaceAll()
: Gibt an, obEmojiCompat
alle gefundenen Emojis durch Instanzen vonEmojiSpan
ersetzt. WennEmojiCompat
erkennt, dass das System ein Emoji rendern kann, wird es standardmäßig nicht ersetzt. Wenntrue
festgelegt ist, ersetztEmojiCompat
alle Emojis durchEmojiSpan
-Objekte.setEmojiSpanIndicatorEnabled()
: Gibt an, obEmojiCompat
ein Emoji durch einEmojiSpan
-Objekt ersetzt. Wenn dieser Parameter auftrue
gesetzt ist, zeichnetEmojiCompat
einen Hintergrund für dieEmojiSpan
. Diese Methode wird hauptsächlich zum Debugging verwendet.setEmojiSpanIndicatorColor
: Mit dieser Option wird die Farbe für einenEmojiSpan
festgelegt. 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 verwendet diese Callbacks, um zu warten, bis EmojiCompat
initialisiert wurde, bevor Emojis in einem Hintergrund-Thread oder in einer benutzerdefinierten Ansicht verarbeitet werden.
Wenn Sie diese Methoden verwenden möchten, erstellen Sie eine Instanz der Klasse EmojiCompat.InitCallback
. Rufen Sie diese Methoden auf und übergeben Sie die Instanz der EmojiCompat.InitCallback
-Klasse. Wenn die Initialisierung erfolgreich war, ruft die Klasse EmojiCompat
die Methode onInitialized()
auf. Wenn die Bibliothek nicht initialisiert werden kann, ruft die EmojiCompat
-Klasse die Methode onFailed()
auf.
Wenn Sie den Initialisierungsstatus jederzeit prüfen möchten, rufen Sie die Methode getLoadState()
auf. Diese Methode gibt einen der folgenden Werte zurück: LOAD_STATE_LOADING
, LOAD_STATE_SUCCEEDED
oder LOAD_STATE_FAILED
.
Unterstützung für bereitgestellte Schriftarten mit emoji2
Sie können das emoji2-bundled
-Artefakt verwenden, um einen Emoji-Schriftschnitt in Ihre App einzubinden.
Da die NotoColorEmoji
-Schrift jedoch mehr als 10 MB groß ist, empfehlen wir nach Möglichkeit, in Ihrer App herunterladbare Schriftschnitte zu verwenden. Das emoji2-bundled
-Artefakt ist für Apps auf Geräten gedacht, die keine herunterladbaren Schriftarten unterstützen.
So verwenden Sie das emoji2-bundled
-Artefakt:
Fügen Sie
emoji2-bundled
- undemoji2
-Artefakte hinzu:implementation "androidx.emoji2:emoji2:$emojiVersion" implementation "androidx.emoji2:emoji2-bundled:$emojiVersion"
Konfigurieren Sie
emoji2
für die Verwendung der bereitgestellten Konfiguration:Kotlin
EmojiCompat.init(BundledEmojiCompatConfig(context))
Java
EmojiCompat.init(new BundledEmojiCompatConfig(context));
Testen Sie die Integration, indem Sie die vorherigen Schritte zum Einfügen von
emojicompat
mit oder ohneAppCompat
ausführen. Prüfen Sie, ob der Teststring korrekt angezeigt wird.- 14.0: 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1: 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0: 🥲, 🥷🏿, Portierung ❄️
- 12.1: 🧑🏻🦰, 🧑🏿🦯, 👩🏻🤝👩🏼
- 12.0: 🦩, 🦻🏿, 🚀
Auswirkungen der automatischen EmojiCompat-Konfiguration
Das System wendet die Standardkonfiguration mit der Startbibliothek, EmojiCompatInitializer
und DefaultEmojiCompatConfig
an.
Nachdem die erste Aktivität in Ihrer App fortgesetzt wurde, plant der Initializer das Laden des Emoji-Schriftbilds. Durch diese kurze Verzögerung kann Ihre App die ersten Inhalte ohne potenzielle Latenz aufgrund des Ladens der Schriftart in einem Hintergrund-Thread anzeigen.
DefaultEmojiCompatConfig
sucht nach einem systeminstallierten Anbieter für herunterladbare Schriftarten, der die EmojiCompat
-Schnittstelle implementiert, z. B. Google Play-Dienste. Auf Geräten mit Google Play-Diensten wird die Schriftart über die Google Play-Dienste geladen.
Die Initialisiererfunktion erstellt einen Hintergrund-Thread zum Laden der Emoji-Schriftart. Der Schriftdownload kann bis zu 10 Sekunden dauern, bevor das Zeitlimit erreicht wird. Nach dem Herunterladen der Schriftart dauert es in einem Hintergrundthread etwa 150 Millisekunden, um EmojiCompat
zu initialisieren.
Die Initialisierung von EmojiCompat
wird verzögert, auch wenn Sie EmojiCompatInitializer
deaktivieren. Wenn Sie EmojiCompat
manuell konfigurieren, rufen Sie EmojiCompat.load()
auf, nachdem der erste Bildschirm Ihrer App angezeigt wird, um Konflikte im Hintergrund beim Laden des ersten Bildschirms zu vermeiden.
Nach dem Laden belegt EmojiCompat
etwa 300 KB RAM für die Emoji-Metadaten.