Moderne Emojis unterstützen

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:

  1. 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"
    
  2. 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 {
    ...
    }
    
  3. 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: 🦩, 🦻🏿, 💻🏼 🤝 🚀

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:

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

  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 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:

  1. Führen Sie den folgenden Befehl aus:

    adb shell dumpsys package com.google.android.gms | grep version
    
  2. Prüfen Sie, ob versionCode größer als 211200000 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:

  1. Füge in die Datei build.gradle deiner 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 abgeleitete Klassen von TextView, Button und EditText, die implementieren, EmojiCompat Nicht verwenden in einer App, die AppCompat enthält, da sie bereits EmojiCompat.

  2. In XML und Code – überall dort, wo Sie TextView, EditText oder Button – verwenden EmojiTextView, EmojiEditText oder EmojiButton.

    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.

  3. 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 korrekt 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 App EmojiCompat nicht.
  • EDITOR_INFO_REPLACE_ALL_KEY: Ist der Schlüssel vorhanden und auf true festgelegt, konfiguriert die App EmojiCompat, 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

  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 den benutzerdefinierten Ansichten Ihrer App.

  3. 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:

  1. 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>
  2. 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 von EmojiCompat 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, ob EmojiCompat alle gefundenen Emojis durch Instanzen ersetzt von EmojiSpan. Wenn EmojiCompat standardmäßig abschließt, dass das System ein Emoji rendert, ersetzt es dieses Emoji nicht. Wenn true festgelegt ist, gilt Folgendes: EmojiCompat ersetzt alle Emojis durch EmojiSpan-Objekte.
  • setEmojiSpanIndicatorEnabled(): gibt an, ob EmojiCompat ein Emoji durch ein EmojiSpan-Element ersetzt -Objekt enthält. Wenn die Richtlinie auf true gesetzt ist, zeichnet EmojiCompat einen Hintergrund für das EmojiSpan Diese Methode wird hauptsächlich zur Fehlerbehebung verwendet.
  • setEmojiSpanIndicatorColor: legt die Farbe fest, um eine EmojiSpan anzuzeigen. Der Standardwert ist GREEN
  • registerInitCallback(): Informiert eine App über den Status der EmojiCompat-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:

  1. Artefakte emoji2-bundled und emoji2 einschließen:

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

    Kotlin

    EmojiCompat.init(BundledEmojiCompatConfig(context))
    

    Java

    EmojiCompat.init(new BundledEmojiCompatConfig(context));
    
  3. Testen Sie die Integration, indem Sie die vorherigen Schritte zum Einbeziehen emojicompat mit oder ohne AppCompat. 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.