Moderne Emojis unterstützen

Compose ausprobieren
Jetpack Compose ist das empfohlene UI-Toolkit für Android. Informationen zur Unterstützung von Emojis im Tool zum Verfassen von E-Mails

Die Standard-Emojis werden jährlich von Unicode aktualisiert, da die Emoji-Nutzung in allen Arten von Apps rapide 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.

Unter Android 11 (API-Level 30) 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 androidx.emoji2:emoji2-Bibliothek bietet eine einfachere Abwärtskompatibilität mit niedrigeren Android-Versionen. Die emoji2-Bibliothek ist eine Abhängigkeit 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 im Verfassen.

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. Auf dieser Seite finden Sie 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:

  1. 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"
    
  2. Achten Sie darauf, dass alle Aktivitäten, in denen Text angezeigt wird, die Klasse AppCompatActivity erweitern.

    Kotlin

    MyActivity.kt
    
    class MyActivity: AppCompatActivity {
    ...
    }

    Java

    MyActivity.java
    
    class MyActivity extends AppCompatActivity {
    ...
    }
  3. 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: 🥲, 🥷🏿, 🐻‍❄️
    • 12.1: 🧑🏻‍🦰, 🧑🏿‍🦯, 👩🏻‍🤝‍👩🏼
    • 12.0: 🦩, 🦻🏿, 👩🏼‍🤝‍👩🏻

Ihre App zeigt automatisch abwärtskompatible Emojis auf allen Geräten an, die einen emoji2-kompatiblen Anbieter für herunterladbare Schriftarten bereitstellen, z. B. Geräte mit Google Play-Diensten.

Wenn Ihre App AppCompat verwendet, aber „Tofu“ (☐) angezeigt wird

In einigen Fällen wird in Ihrer App möglicherweise Tofu anstelle des richtigen Emojis angezeigt, auch wenn Sie die AppCompat-Bibliothek hinzufügen. 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 eventuell beim Starten erstellte Schriftarten-Caches zu entfernen. In der Regel wird das Problem dadurch nach einigen Stunden behoben.

So löschen Sie die App-Daten:

  1. Öffnen Sie auf Ihrem Android-Gerät die Einstellungen.

  2. Tippe auf Apps & Benachrichtigungen.

  3. Tippen Sie auf Alle Apps anzeigen oder App-Info.

  4. Scrollen Sie durch die Apps und tippen Sie auf Google Play-Dienste.

  5. Tippen Sie auf Speicher und Cache.

  6. 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 durch 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.

In einem Emulator mit einer früheren API-Ebene wurden die Google Play-Dienste nicht aktualisiert.

Wenn Sie einen Emulator mit einer früheren API-Ebene verwenden, müssen Sie möglicherweise die bereitgestellten Google Play-Dienste für emoji2 aktualisieren, damit der Schriftanbieter gefunden wird. Melden Sie sich dazu im Google Play Store auf dem Emulator an.

So prüfen Sie, ob eine kompatible Version installiert ist:

  1. Führen Sie den folgenden Befehl aus:

    adb shell dumpsys package com.google.android.gms | grep version
    
  2. Prüfen Sie, ob versionCode höher als 211200000 ist.

Emojis ohne AppCompat unterstützen

Wenn Ihre App AppCompat nicht enthalten kann, kann sie emoji2 direkt verwenden. Das ist etwas aufwendiger. Verwenden Sie diese Methode daher nur, wenn AppCompat nicht in Ihrer App verwendet werden kann.

So unterstützen Sie Emojis ohne die AppCompat-Bibliothek:

  1. Fügen Sie in der Datei build.gradle Ihrer App emoji2 und emoji2-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 von TextView, Button und EditText, die EmojiCompat implementieren. Verwenden Sie sie nicht in einer App, die AppCompat enthält, da EmojiCompat bereits implementiert ist.

  2. Verwenden Sie in XML- und Codedateien anstelle von TextView, EditText oder Button die Zeichen EmojiTextView, EmojiEditText oder EmojiButton.

    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. Es ist keine weitere Konfiguration erforderlich.

  3. Starten Sie zum Testen Ihrer Integration 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.

    • 14.0: 🫠, 🫱🏼‍🫲🏿, 🫰🏽
    • 13.1: 😶‍🌫️, 🧔🏻‍♀️, 🧑🏿‍❤️‍🧑🏾
    • 13.0: 🥲, 🥷🏿, 🐻‍❄️
    • 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 Eingabemethoden-Editoren 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 Version von EmojiCompat 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 App EmojiCompat nicht.
  • EDITOR_INFO_REPLACE_ALL_KEY: Wenn der Schlüssel vorhanden ist und auf true festgelegt ist, konfiguriert die App EmojiCompat 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.

Das Verfahren variiert je nachdem, ob Ihre App die AppCompat-Bibliothek verwendet.

Benutzerdefinierte Ansichten für Apps mit AppCompat hinzufügen

Wenn Ihre App AppCompat verwendet, erweitern Sie 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. Dies sind die Hilfsfunktionen, die in der AppCompat-Bibliothek zur Implementierung der Emoji-Unterstützung verwendet werden.

Führen Sie die folgenden Schritte aus, um benutzerdefinierte Ansichten für Apps zu unterstützen, die AppCompat nicht verwenden.

  1. Fügen Sie die emoji2-views-helper-Bibliothek hinzu:

    implementation "androidx.emoji2:emoji2-views-helper:$emojiVersion"
    
  2. Folgen Sie der Anleitung, um EmojiTextViewHelper oder EmojiEditTextHelper in die benutzerdefinierten Ansichten Ihrer App aufzunehmen.

  3. 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: 🥲, 🥷🏿, 🐻‍❄️
    • 12.1: 🧑🏻‍🦰, 🧑🏿‍🦯, 👩🏻‍🤝‍👩🏼
    • 12.0: 🦩, 🦻🏿, 👩🏼‍🤝‍👩🏻

Optionale Funktionen für die Verarbeitung von Emoji2

Nachdem du die emoji2-Bibliothek in deine App eingebunden hast, kannst du die optionalen Funktionen hinzufügen, die in diesem Abschnitt beschrieben werden.

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:

  1. 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>
  2. Führen Sie einen der folgenden Schritte aus:

    • Verwenden Sie die Standardkonfiguration, indem Sie DefaultEmojiCompatConfiguration.create(context) aufrufen.

    • Erstellen Sie eine eigene Konfiguration, um Schriftarten mit EmojiCompat.Config aus einer anderen Quelle zu laden. Diese Klasse bietet mehrere Optionen, um das Verhalten von EmojiCompat zu ändern, 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(). Sie steuert, 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 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 App muss die Ausführung der Funktion bis nach dem Einblenden des ersten Bildschirms verschieben, 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, ob EmojiCompat alle gefundenen Emojis durch Instanzen von EmojiSpan ersetzt. Wenn EmojiCompat erkennt, dass das System ein Emoji rendern kann, wird es standardmäßig nicht ersetzt. Wenn true festgelegt ist, ersetzt EmojiCompat alle Emojis durch EmojiSpan-Objekte.
  • setEmojiSpanIndicatorEnabled(): Gibt an, ob EmojiCompat ein Emoji durch ein EmojiSpan-Objekt ersetzt. Wenn dieser Parameter auf true gesetzt ist, zeichnet EmojiCompat einen Hintergrund für die EmojiSpan. Diese Methode wird hauptsächlich zum Debugging verwendet.
  • setEmojiSpanIndicatorColor: Mit dieser Option wird die Farbe für EmojiSpan festgelegt. Der Standardwert ist GREEN.
  • registerInitCallback(): Informiert eine App über den Status der EmojiCompat-Initialisierung.

Initialisierungs-Listener hinzufügen

Die Klassen EmojiCompat und EmojiCompat.Config bieten die Methoden registerInitCallback() und unregisterInitCallback(), um Initialisierungs-Callbacks zu registrieren und abzumelden. 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:

  1. Fügen Sie emoji2-bundled- und emoji2-Artefakte hinzu:

    implementation "androidx.emoji2:emoji2:$emojiVersion"
    implementation "androidx.emoji2:emoji2-bundled:$emojiVersion"
    
  2. Konfigurieren Sie emoji2 für die Verwendung der bereitgestellten Konfiguration:

    Kotlin

    EmojiCompat.init(BundledEmojiCompatConfig(context))

    Java

    EmojiCompat.init(new BundledEmojiCompatConfig(context));
  3. Testen Sie die Integration, indem Sie die vorherigen Schritte zum Einfügen von emojicompat mit oder ohne AppCompat ausführen. Achten Sie darauf, dass der Teststring richtig angezeigt wird.

    • 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 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 Hintergrund-Thread etwa 150 Millisekunden, bis EmojiCompat initialisiert ist.

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.