Der Standardsatz an Emojis wird jährlich von Unicode aktualisiert, da die Nutzung von Emojis in allen Arten von Apps rasant zunimmt.
Wenn deine App Internetinhalte anzeigt oder Texteingaben ermöglicht, empfehlen wir dringend, die neuesten Emoji-Schriftarten zu unterstützen. Andernfalls werden neuere Emojis möglicherweise als kleines Quadrat (☐) angezeigt, das auch als Tofu bezeichnet wird, oder als andere falsch gerenderte Emoji-Sequenzen.
Unter Android 11 (API-Level 30) und niedriger kann die Emoji-Schriftart nicht aktualisiert werden. Apps, die Emojis in diesen Versionen anzeigen, müssen daher manuell aktualisiert werden.
Hier sind einige Beispiele für moderne Emojis.
| Beispiele | Version |
|---|---|
| 🇨🇶 | 16.0 (September 2024) |
| 🐦🔥 🧑🧑🧒🧒 👩🏽🦽➡️ 🇲🇶 | 15.1 (September 2023) |
| 🩷 🫸🏼 🐦⬛ | 15.0 (September 2022) |
| 🫠 🫱🏼🫲🏿 🫰🏽 | 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 eine einfachere Abwärtskompatibilität mit älteren Android-Versionen. Die Bibliothek emoji2 ist eine Abhängigkeit der Bibliothek AppCompat und erfordert keine weitere Konfiguration.
Emoji-Unterstützung in „Schreiben“
Die BOM vom März 2023 (Compose UI 1.4) bietet Unterstützung für die neueste Emoji-Version, einschließlich Abwärtskompatibilität mit älteren Android-Versionen bis API 21. Auf dieser Seite wird beschrieben, wie Sie moderne Emojis im View-System konfigurieren. Weitere Informationen finden Sie auf der Seite Emojis in Compose.
Vorbereitung
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 Sie zu Testzwecken anzeigen lassen 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ängig ist.build.gradle // Ensure version is 1.4.0-alpha01 or higher. implementation "androidx.appcompat:appcompat.$appcompatVersion"Achte darauf, dass alle Aktivitäten, die Text anzeigen, die Klasse
AppCompatActivityerweitern.Kotlin
MyActivity.kt class MyActivity: AppCompatActivity { ... }
Java
MyActivity.java class MyActivity extends AppCompatActivity { ... }
Testen Sie Ihre Integration, indem Sie Ihre App auf einem Gerät mit Android 10 oder niedriger starten und den folgenden Teststring anzeigen lassen. Achten Sie darauf, dass alle Zeichen korrekt dargestellt werden.
- 16.0: , , 🇨🇶
- 15.1: 🐦🔥, 🧑🧑🧒🧒, 👩🏽🦽➡️, 🇲🇶
- 15.0: 🩷, 🫸🏼, 🐦⬛
- 14.0: 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1: 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0: 🥲, 🥷🏿, 🐻❄️
- 12.1: 🧑🏻🦰, 🧑🏿🦯, 👩🏻🤝👩🏼
- 12.0: 🦩, 🦻🏿, 👩🏼🤝👩🏻
In Ihrer App werden abwärtskompatible Emojis automatisch auf allen Geräten angezeigt, die einen mit emoji2 kompatiblen Anbieter für herunterladbare Schriftarten bereitstellen, z. B. Geräte, die von den Google Play-Diensten unterstützt 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-Bibliothek 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 das Font-Caching zu löschen, das beim Starten auftreten kann. 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.
Tippen Sie auf Apps & Benachrichtigungen.
Tippe auf Alle Apps ansehen 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
Das kann passieren, wenn Sie AppCompatActivity nicht erweitern oder eine Ansicht im Code instanziieren, z. B. TextView. Überprüfen Sie Folgendes:
- Die Aktivität erweitert
AppCompatActivity. - Wenn Sie die Ansicht im Code erstellen, verwenden Sie die richtige
AppCompat-Unterklasse.
AppCompatActivity bläht beim Aufblähen von XML automatisch AppCompatTextView anstelle von TextView auf, sodass du deine XML nicht aktualisieren musst.
Das Test-Smartphone unterstützt keine herunterladbaren Schriftarten
Prüfen Sie, ob DefaultEmojiCompatConfig.create eine Konfiguration zurückgibt, die nicht null ist.
Ein Emulator mit einem früheren API-Level 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, damit der Schriftartanbieter gefunden wird. Melden Sie sich dazu im Emulator im Google Play Store an.
So prüfen Sie, ob eine kompatible Version installiert ist:
Führen Sie dazu diesen Befehl aus:
adb shell dumpsys package com.google.android.gms | grep versionPrüfen Sie, ob der
versionCodehöher als211200000ist.
Unterstützung von Emojis ohne AppCompat
Wenn Ihre App AppCompat nicht enthalten kann, kann sie emoji2 direkt verwenden. Dies erfordert mehr Arbeit. Verwenden Sie diese Methode daher nur, wenn Ihre App AppCompat nicht verwenden kann.
So unterstützen Sie Emojis ohne die AppCompat-Bibliothek:
Fügen Sie in der Datei
build.gradleIhrer Anwendungemoji2undemoji2-viewsein.build.gradle def emojiVersion = "1.0.0-alpha03" implementation "androidx.emoji2:emoji2:$emojiVersion" implementation "androidx.emoji2:emoji2-views:$emojiVersion"Das Modul
emoji2-viewsstellt Unterklassen vonTextView,ButtonundEditTextbereit, dieEmojiCompatimplementieren. Verwenden Sie es nicht in einer App, dieAppCompatenthält, daEmojiCompatbereits implementiert ist.Verwenden Sie in XML und Code überall dort, wo Sie
TextView,EditTextoderButtonverwenden, stattdessenEmojiTextView,EmojiEditTextoderEmojiButton.activity_main.xml <androidx.emoji2.widget.EmojiTextView ... /> <androidx.emoji2.widget.EmojiEditText ... /> <androidx.emoji2.widget.EmojiButton ... />Wenn du das Modul
emoji2einbindest, verwendet das System den Standardanbieter für herunterladbare Schriftarten, um die Emoji-Schriftart automatisch kurz nach dem Start der App zu laden. Es ist keine weitere Konfiguration erforderlich.Wenn Sie Ihre Integration testen möchten, starten Sie Ihre App auf einem Gerät mit Android 11 oder niedriger, auf dem die folgenden Teststrings angezeigt werden. Achten Sie darauf, dass alle Zeichen korrekt dargestellt werden.
- 16.0: , , 🇨🇶
- 15.1: 🐦🔥, 🧑🧑🧒🧒, 👩🏽🦽➡️, 🇲🇶
- 15.0: 🩷, 🫸🏼, 🐦⬛
- 14.0: 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1: 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0: 🥲, 🥷🏿, 🐻❄️
- 12.1: 🧑🏻🦰, 🧑🏿🦯, 👩🏻🤝👩🏼
- 12.0: 🦩, 🦻🏿, 👩🏼🤝👩🏻
EmojiCompat ohne Widgets verwenden
EmojiCompat verwendet EmojiSpan, um die richtigen Bilder zu rendern. Daher muss jedes angegebene CharSequence-Objekt in ein Spanned-Objekt mit EmojiSpan-Objekten konvertiert werden.
Die Klasse „EmojiCompat“ stellt die Methode process() bereit, um CharSequences in Spanned-Instanzen zu konvertieren. Mit dieser Methode können Sie process() im Hintergrund aufrufen 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 Eingabemethoden-Editoren verwenden
Mit der Klasse EmojiCompat können Tastaturen die Emojis rendern, die von der App unterstützt werden, mit der sie interagieren. Eingabemethoden-Editoren (IMEs) können die Methode getEmojiMatch() verwenden, um zu prüfen, ob eine Instanz von EmojiCompat ein Emoji rendern kann. Diese Methode verwendet einen CharSequence 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, welche Emojis in der Palette gerendert werden sollen. Um die Version zu prüfen, kann die Tastatur, sofern verfügbar, nach den folgenden Schlüsseln im EditorInfo.extras-Bundle suchen:
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 AppEmojiCompatnicht.EDITOR_INFO_REPLACE_ALL_KEY: Wenn der Schlüssel vorhanden und auftruefestgelegt ist, konfiguriert die AppEmojiCompatso, dass alle Emojis ersetzt werden, auch wenn sie im System vorhanden sind.
Weitere Informationen zum Konfigurieren einer EmojiCompat-Instanz
Emojis in benutzerdefinierten Ansichten verwenden
Wenn Ihre App benutzerdefinierte Ansichten hat, die direkte oder indirekte Unterklassen von TextView sind, z. B. Button, Switch oder EditText, und diese Ansichten von Nutzern erstellte Inhalte anzeigen können, müssen sie jeweils EmojiCompat implementieren.
Der Vorgang variiert je nachdem, ob Ihre App die AppCompat-Bibliothek verwendet.
Benutzerdefinierte Ansichten für Apps mit AppCompat hinzufügen
Wenn in Ihrer App AppCompat verwendet wird, erweitern Sie die AppCompat-Implementierung anstelle der Plattformimplementierung. In der folgenden Tabelle finden Sie eine Anleitung zum Erweitern Ihrer Ansichten 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 AppCompat nicht verwendet wird, können Sie die Hilfsprogramme für die Ansichtsintegration im Modul emoji2-views-helper verwenden, die für die Verwendung in benutzerdefinierten Ansichten vorgesehen sind. Diese Hilfsprogramme werden von der AppCompat-Bibliothek verwendet, um die Emoji-Unterstützung zu implementieren.
Führe die folgenden Schritte aus, um benutzerdefinierte Ansichten für Apps zu unterstützen, die nicht AppCompat verwenden.
Fügen Sie die Bibliothek
emoji2-views-helperhinzu:implementation "androidx.emoji2:emoji2-views-helper:$emojiVersion"Folgen Sie der Anleitung, um
EmojiTextViewHelperoderEmojiEditTextHelperin die benutzerdefinierten Ansichten Ihrer App einzufügen.Testen Sie Ihre Integration, indem Sie Ihre App auf einem Gerät mit Android 10 oder niedriger starten und den folgenden Teststring anzeigen lassen. Achten Sie darauf, dass alle Zeichen korrekt dargestellt werden.
- 16.0: , , 🇨🇶
- 15.1: 🐦🔥, 🧑🧑🧒🧒, 👩🏽🦽➡️, 🇲🇶
- 15.0: 🩷, 🫸🏼, 🐦⬛
- 14.0: 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1: 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0: 🥲, 🥷🏿, 🐻❄️
- 12.1: 🧑🏻🦰, 🧑🏿🦯, 👩🏻🤝👩🏼
- 12.0: 🦩, 🦻🏿, 👩🏼🤝👩🏻
Optionale Funktionen für den Umgang mit emoji2
Nachdem Sie die emoji2-Bibliothek in Ihre App eingebunden haben, können Sie die in diesem Abschnitt beschriebenen optionalen Funktionen hinzufügen.
emoji2 so konfigurieren, dass eine andere Schriftart oder ein anderer Anbieter für herunterladbare Schriftarten verwendet wird
So konfigurieren Sie emoji2 für die Verwendung einer anderen Schriftart oder eines anderen Anbieters für herunterladbare Schriftarten:
Deaktivieren Sie
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)aufrufen.Erstellen Sie mit
EmojiCompat.Configeine eigene Konfiguration, um Schriftarten aus einer anderen Quelle zu laden. Diese Klasse bietet mehrere Optionen zum Ändern des Verhaltens vonEmojiCompat, 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(), mit der gesteuert wird, wann EmojiCompat die Schriftart lädt. Das Laden der Schriftart beginnt, sobald EmojiCompat.load() aufgerufen wird. Dadurch werden alle erforderlichen Downloads ausgelöst. Das System erstellt einen Thread für das Herunterladen von Schriftarten, sofern Ihre App keinen bereitstellt.
Mit LOAD_STRATEGY_MANUAL können Sie steuern, wann EmojiCompat.load() aufgerufen wird, und mit LOAD_STRATEGY_DEFAULT wird das Laden synchron im Aufruf von EmojiCompat.init() gestartet.
Die meisten Apps verwenden LOAD_STRATEGY_MANUAL, um den Thread und das Timing des Ladens von Schriftarten zu steuern. Ihre App muss warten, bis der erste Bildschirm angezeigt wird, um Startlatenz zu vermeiden. EmojiCompatInitializer folgt dieser Vorgehensweise und verschiebt das Laden der Emoji-Schriftart, bis der erste Bildschirm wieder angezeigt wird.
Verwenden Sie die folgenden Methoden aus der Basisklasse, um andere Aspekte der Konfiguration festzulegen:
setReplaceAll(): Bestimmt, obEmojiCompatalle gefundenen Emojis durch Instanzen vonEmojiSpanersetzt. WennEmojiCompatstandardmäßig davon ausgeht, dass das System ein Emoji rendern kann, wird dieses Emoji nicht ersetzt. Wenn dieser Wert auftruegesetzt ist, ersetztEmojiCompatalle Emojis durchEmojiSpan-Objekte.setEmojiSpanIndicatorEnabled(): Gibt an, obEmojiCompatein Emoji durch einEmojiSpan-Objekt ersetzt. Wenn der Wert auftruefestgelegt ist, zeichnetEmojiCompateinen Hintergrund für dieEmojiSpan. Diese Methode wird hauptsächlich für die Fehlerbehebung verwendet.setEmojiSpanIndicatorColor: Legt die Farbe fest, um einenEmojiSpananzugeben. 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(), um Initialisierungs-Callbacks zu registrieren und die Registrierung aufzuheben. Ihre App verwendet diese Callbacks, um zu warten, bis EmojiCompat initialisiert ist, bevor Sie Emojis in einem Hintergrundthread oder in einer benutzerdefinierten Ansicht verarbeiten.
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 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.
Wenn Sie den Initialisierungsstatus 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 gebündelte Schriftarten mit emoji2
Mit dem Artefakt emoji2-bundled können Sie eine Emoji-Schriftart in Ihre App einbinden.
Da die Schriftart NotoColorEmoji jedoch über 10 MB groß ist, empfehlen wir dringend, nach Möglichkeit herunterladbare Schriftarten zu verwenden. Das Artefakt emoji2-bundled ist für Apps auf Geräten gedacht, die keine herunterladbaren Schriftarten unterstützen.
So verwenden Sie das Artefakt emoji2-bundled:
emoji2-bundled- undemoji2-Artefakte einbeziehen:implementation "androidx.emoji2:emoji2:$emojiVersion" implementation "androidx.emoji2:emoji2-bundled:$emojiVersion"Konfigurieren Sie
emoji2so, dass die gebündelte Konfiguration verwendet wird:Kotlin
EmojiCompat.init(BundledEmojiCompatConfig(context))
Java
EmojiCompat.init(new BundledEmojiCompatConfig(context));
Testen Sie die Integration, indem Sie die vorherigen Schritte zum Einbinden von
emojicompatmit oder ohneAppCompatausführen. Prüfen Sie, ob der Teststring korrekt angezeigt wird.- 16.0: , , 🇨🇶
- 15.1: 🐦🔥, 🧑🧑🧒🧒, 👩🏽🦽➡️, 🇲🇶
- 15.0: 🩷, 🫸🏼, 🐦⬛
- 14.0: 🫠, 🫱🏼🫲🏿, 🫰🏽
- 13.1: 😶🌫️, 🧔🏻♀️, 🧑🏿❤️🧑🏾
- 13.0: 🥲, 🥷🏿, 🐻❄️
- 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 Initialisierer das Laden der Emoji-Schriftart. Durch diese kurze Verzögerung kann Ihre App die ersten Inhalte ohne potenzielle Latenz aufgrund des Ladens von Schriftarten in einem Hintergrundthread anzeigen.
DefaultEmojiCompatConfig sucht nach einem systeminstallierten Anbieter für herunterladbare Schriftarten, der die EmojiCompat-Schnittstelle implementiert, z. B. Google Play-Dienste. Auf Geräten, die von Google Play-Diensten unterstützt werden, wird die Schriftart über die 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, bevor ein Zeitüberschreitungsfehler auftritt. Nachdem die Schriftart heruntergeladen wurde, dauert es etwa 150 Millisekunden, bis EmojiCompat in einem Hintergrundthread initialisiert wird.
Die Initialisierung von EmojiCompat wird auch dann verzögert, wenn Sie EmojiCompatInitializer deaktivieren. Wenn Sie EmojiCompat manuell konfigurieren, rufen Sie EmojiCompat.load() auf, nachdem der erste Bildschirm Ihrer App angezeigt wurde. So vermeiden Sie Hintergrundkonflikte beim Laden des ersten Bildschirms.
Nach dem Laden belegt EmojiCompat etwa 300 KB RAM, um die Emoji-Metadaten zu speichern.