Der Standardsatz von 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 oder Texteingabemöglichkeiten zur Verfügung stehen, empfehlen wir dringend, die neuesten Emoji-Schriftarten zu unterstützen. Andernfalls wird später möglicherweise ein kleines quadratisches Feld mit dem Namen Tofu (Mittelpunkt) oder andere falsch gerenderte Emoji-Sequenzen angezeigt.
Bei Android-Version 11 (API-Level 30) und niedriger kann die Emoji-Schriftart nicht aktualisiert werden. Apps, in denen sie 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 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.
Unterstützung von Emojis in der Funktion „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 zu Testzwecken anzeigen können.
AppCompat verwenden, um die neuesten Emojis zu unterstützen
AppCompat
1.4 unterstützt Emojis.
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ängig ist.build.gradle // Ensure version is 1.4.0-alpha01 or higher. implementation "androidx.appcompat:appcompat.$appcompatVersion"
Sorgen Sie dafür, dass alle Aktivitäten, die Text anzeigen, die Klasse
AppCompatActivity
erweitern.Kotlin
MyActivity.kt class MyActivity: AppCompatActivity { ... }
Java
MyActivity.java class MyActivity extends AppCompatActivity { ... }
Teste deine Integration, indem du die App auf einem Gerät mit Android 10 oder niedriger startest und den folgenden Teststring aufrufst. Achtet darauf, dass alle Zeichen richtig gerendert werden.
- 14.0: 🫠, 🫱🏼 🫲🏿, 🫰🏽
- 13.1: 😶 🌫️, 🧔🏻 ♀️, 🧑🏿 ❤️ 🧑🏾
- 13.0: 🥲, 🥷🏿, 🌴 ❯
- 12.1: 🧑 🦰, 🧑🏿 🦯, 😝 🤝 🚀🏼
- 12.0: 🦩, 🦻🏿, {4/}🏼 🤝 ♀️
Ihre App zeigt automatisch abwärtskompatible Emojis auf allen Geräten an, die einen emoji2
-kompatiblen Anbieter von Schriftarten zum Download anbieten, z. B. auf Geräten, die von Google Play-Diensten unterstützt werden.
Wenn Ihre App AppCompat verwendet, aber Tofu angezeigt wird (Zahl)
In einigen Fällen zeigt deine App möglicherweise Tofu anstelle des richtigen Emojis an, auch wenn du die AppCompat
-Bibliothek hinzugefügt hast. Im Folgenden sind mögliche Erklärungen und Lösungen aufgeführt.
Du führst die App auf einem kürzlich geflashten Gerät oder in einem neuen Emulator aus.
Löschen Sie die Daten der Google Play-Dienste der App, um alle Schriftarten-Caching zu löschen, die möglicherweise beim Start auftreten. Dadurch wird das Problem in der Regel 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 Anwendung 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 erweitert
AppCompatActivity
. - Wenn Sie die Ansicht im Code erstellen, verwenden Sie die richtige
AppCompat
-Unterklasse.
AppCompatActivity
erhöht automatisch AppCompatTextView
anstelle von TextView
, wenn XML aufgebläht wird, sodass du den XML-Code nicht aktualisieren musst.
Das Test-Smartphone unterstützt keine herunterladbaren Schriftarten
Prüfen Sie, ob DefaultEmojiCompatConfig.create
eine Konfiguration ungleich null zurückgibt.
Die Google Play-Dienste wurden durch einen Emulator mit einem früheren API-Level 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. Melden Sie sich 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
größer als211200000
ist.
Emojis ohne AppCompat unterstützen
Wenn deine App AppCompat
nicht enthalten kann, kann sie direkt emoji2
verwenden. Dies ist aufwendiger. Verwenden Sie diese Methode also nur, wenn Ihre App AppCompat
nicht verwenden kann.
So unterstützen Sie Emojis ohne die AppCompat
-Bibliothek:
Füge in der 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 untergeordnete Klassen vonTextView
,Button
undEditText
, dieEmojiCompat
implementieren. Verwende ihn nicht in einer Anwendung, dieAppCompat
enthält, daEmojiCompat
bereits implementiert ist.Verwenden Sie in XML und Code überall dort, wo Sie
TextView
,EditText
oderButton
verwenden, stattdessenEmojiTextView
,EmojiEditText
oderEmojiButton
.activity_main.xml <androidx.emoji2.widget.EmojiTextView ... /> <androidx.emoji2.widget.EmojiEditText ... /> <androidx.emoji2.widget.EmojiButton ... />
Wenn Sie das Modul
emoji2
einbinden, 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.Starte zum Testen der Integration deine App auf einem Gerät mit Android 11 oder niedriger und präsentiere die folgenden Teststrings. Achtet darauf, dass alle Zeichen richtig gerendert werden.
- 14.0: 🫠, 🫱🏼 🫲🏿, 🫰🏽
- 13.1: 😶 🌫️, 🧔🏻 ♀️, 🧑🏿 ❤️ 🧑🏾
- 13.0: 🥲, 🥷🏿, 🌴 ❯
- 12.1: 🧑 🦰, 🧑🏿 🦯, 😝 🤝 🚀🏼
- 12.0: 🦩, 🦻🏿, {4/}🏼 🤝 ♀️
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()
bereit, um CharSequences
in Spanned
-Instanzen zu konvertieren. Mit dieser Methode können Sie process()
im Hintergrund aufrufen und die Ergebnisse im Cache speichern. Dadurch wird 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 Emojis rendern, die von der App unterstützt werden, mit der sie interagieren. Eingabemethoden-Editoren (IMEs) können mit der Methode getEmojiMatch()
prüfen, ob eine Instanz von EmojiCompat
in der Lage ist, ein Emoji zu rendern. Diese Methode verwendet ein 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 festzustellen, welches Emoji in der Palette gerendert werden soll. Zum Prüfen der Version kann die Tastatur im Bundle EditorInfo.extras
nach den folgenden Tasten suchen (falls verfügbar):
EDITOR_INFO_METAVERSION_KEY
: Stellt die Version der Emoji-Metadaten dar, die die App verwendet. Ist dieser Schlüssel nicht vorhanden, 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 App benutzerdefinierte Ansichten hat, die direkte oder indirekte abgeleitete Klassen von TextView
sind, z. B. Button
, Switch
oder EditText
, und in diesen Ansichten von Nutzern erstellte Inhalte angezeigt werden können, müssen sie EmojiCompat
implementieren.
Die Vorgehensweise hängt davon ab, ob deine App die AppCompat
-Bibliothek verwendet.
Benutzerdefinierte Ansichten für Anwendungen mit AppCompat hinzufügen
Wenn deine App AppCompat
verwendet, erweitere die AppCompat
-Implementierung anstelle der Plattformimplementierung. Verwenden Sie die folgende Tabelle als Leitfaden zum Erweitern der Ansichten in AppCompat
:
Statt zu verlängern... | 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 AppCompat
in Ihrer App nicht verwendet wird, verwenden Sie die Hilfsfunktionen für die Integration von Ansichten im Modul emoji2-views-helper
, die für die Verwendung in benutzerdefinierten Ansichten entwickelt wurden. Das sind die Hilfsprogramme, mit denen die AppCompat
-Bibliothek die Emoji-Unterstützung implementiert.
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 einzufügen.Teste deine Integration, indem du die App auf einem Gerät mit Android 10 oder niedriger startest und den folgenden Teststring aufrufst. Achtet darauf, dass alle Zeichen richtig gerendert werden.
- 14.0: 🫠, 🫱🏼 🫲🏿, 🫰🏽
- 13.1: 😶 🌫️, 🧔🏻 ♀️, 🧑🏿 ❤️ 🧑🏾
- 13.0: 🥲, 🥷🏿, 🌴 ❯
- 12.1: 🧑 🦰, 🧑🏿 🦯, 😝 🤝 🚀🏼
- 12.0: 🦩, 🦻🏿, {4/}🏼 🤝 ♀️
Optionale Funktionen für den Umgang mit Emojis2
Nachdem Sie die emoji2
-Bibliothek in Ihre App eingebunden haben, können Sie die in diesem Abschnitt beschriebenen optionalen Features hinzufügen.
Für Emojis2 eine andere Schriftart oder eine andere herunterladbare Schriftart konfigurieren
So konfigurieren Sie emoji2
für die Verwendung einer anderen Schriftart oder eines herunterladbaren Schriftartanbieters:
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. Rufen Sie dazu
DefaultEmojiCompatConfiguration.create(context)
auf.Erstellen Sie Ihre eigene Konfiguration, um Schriftarten aus einer anderen Quelle mit
EmojiCompat.Config
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 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 zum Herunterladen von Schriftarten, sofern Ihre App keinen Thread bereitstellt.
Mit LOAD_STRATEGY_MANUAL
können Sie festlegen, wann EmojiCompat.load()
aufgerufen wird. Mit LOAD_STRATEGY_DEFAULT
wird das Laden im Aufruf von EmojiCompat.init()
synchron gestartet.
Die meisten Anwendungen verwenden LOAD_STRATEGY_MANUAL
, damit sie den Thread und den Zeitpunkt des Ladens von Schriftarten steuern können. Ihre Anwendung muss den Vorgang bis zum Erscheinen des ersten Bildschirms verzögern, um Verzögerungen beim Start zu vermeiden. EmojiCompatInitializer
folgt dieser Übung 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()
: Bestimmt, obEmojiCompat
alle gefundenen Emojis durch Instanzen vonEmojiSpan
ersetzt. WennEmojiCompat
ermittelt, 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. Wenntrue
festgelegt ist, zeichnetEmojiCompat
einen Hintergrund fürEmojiSpan
. Diese Methode wird hauptsächlich zum Zweck der Fehlerbehebung verwendet.setEmojiSpanIndicatorColor
: Legt die Farbe zur Kennzeichnung einesEmojiSpan
fest. Der Standardwert istGREEN
.registerInitCallback()
: Informiert eine App über den Status derEmojiCompat
-Initialisierung.
Initialisierungs-Listener hinzufügen
Die Klassen EmojiCompat
und EmojiCompat.Config
stellen die Methoden registerInitCallback()
und unregisterInitCallback()
zum Registrieren und Aufheben der Registrierung von Initialisierungs-Callbacks bereit. Deine App verwendet diese Callbacks, um zu warten, bis EmojiCompat
initialisiert wurde, bevor du Emojis in einem Hintergrundthread oder in einer benutzerdefinierten Ansicht verarbeitet.
Erstellen Sie eine Instanz der Klasse EmojiCompat.InitCallback
, um diese Methoden zu verwenden. Rufen Sie diese Methoden auf und übergeben Sie die Instanz der EmojiCompat.InitCallback
-Klasse. Nach erfolgreicher Initialisierung 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 jederzeit den Initialisierungsstatus prüfen, indem Sie die Methode getLoadState()
aufrufen. Diese Methode gibt einen der folgenden Werte zurück: LOAD_STATE_LOADING
, LOAD_STATE_SUCCEEDED
oder LOAD_STATE_FAILED
.
Gebündelte Schriftarten mit Emojis2 unterstützen
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 deiner App dringend, herunterladbare Schriftarten nach Möglichkeit 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 vom Typ
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));
Führe zum Testen der Integration die vorherigen Schritte aus, um
emojicompat
mit oder ohneAppCompat
einzuschließen. Prüfen Sie, ob der Teststring korrekt angezeigt wird.- 14.0: 🫠, 🫱🏼 🫲🏿, 🫰🏽
- 13.1: 😶 🌫️, 🧔🏻 ♀️, 🧑🏿 ❤️ 🧑🏾
- 13.0: 🥲, 🥷🏿, 🌴 ❯
- 12.1: 🧑 🦰, 🧑🏿 🦯, 😝 🤝 🚀🏼
- 12.0: 🦩, 🦻🏿, {4/}🏼 🤝 ♀️
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 Initialisierer das Laden der Emoji-Schriftart. Durch diese kurze Verzögerung kann Ihre Anwendung den ersten Inhalt ohne potenzielle Latenz anzeigen, die durch das Laden von Schriftarten in einem Hintergrundthread verursacht wird.
DefaultEmojiCompatConfig
sucht nach einem vom System installierten herunterladbaren Schriftartanbieter, 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 zum Laden der Emoji-Schriftart. Der Download der Schriftart kann bis zu 10 Sekunden dauern, bis eine Zeitüberschreitung auftritt. Nachdem die Schriftart heruntergeladen wurde, dauert es etwa 150 Millisekunden, EmojiCompat
in einem Hintergrundthread zu initialisieren.
Sie können die Initialisierung von EmojiCompat
auf später verschieben, auch wenn Sie EmojiCompatInitializer
deaktivieren. Wenn Sie EmojiCompat
manuell konfigurieren, rufen Sie EmojiCompat.load()
nach dem ersten Bildschirm der App auf, um Hintergrundkonflikte beim ersten Bildschirmaufbau zu vermeiden.
Nach dem Laden verwendet EmojiCompat
etwa 300 KB RAM zum Speichern der Emoji-Metadaten.