Ziel der EmojiCompat
-Supportbibliothek ist es, Android-Geräten mit den neuesten Emojis auf dem neuesten Stand zu halten. Dadurch wird verhindert, dass in deiner App fehlende Emoji-Zeichen im Format XXXXX angezeigt werden. Das bedeutet, dass dein Gerät keine Schriftart zur Darstellung des Texts hat. Wenn du die EmojiCompat
-Supportbibliothek verwendest, müssen deine App-Nutzer nicht auf Android-Updates warten, um die neuesten Emojis zu erhalten.
Weitere Informationen finden Sie in den folgenden Ressourcen:
Wie funktioniert EmojiCompat?
Die EmojiCompat
-Supportbibliothek enthält Klassen zur Implementierung der abwärtskompatiblen Emoji-Unterstützung auf Geräten mit Android 4.4 (API-Level 19) und höher. Du kannst EmojiCompat
entweder mit gebündelten oder herunterladbaren Schriftarten konfigurieren. Weitere Informationen zur Konfiguration finden Sie in den folgenden Abschnitten:
EmojiCompat
identifiziert Emojis für eine bestimmte CharSequence
, ersetzt sie bei Bedarf durch EmojiSpans
und rendert schließlich die Emoji-Glyphen. Abbildung 2 veranschaulicht den Prozess.
Konfiguration für herunterladbare Schriftarten
Bei der Konfiguration für herunterladbare Schriftarten wird die Funktion der Supportbibliothek für herunterladbare Schriftarten verwendet, um eine Emoji-Schriftart herunterzuladen. Außerdem werden die erforderlichen Emoji-Metadaten aktualisiert, die die EmojiCompat
-Unterstützungsbibliothek benötigt, um mit den neuesten Versionen der Unicode-Spezifikation Schritt zu halten.
Abhängigkeit von Supportbibliotheken hinzufügen
Damit Sie die EmojiCompat
-Supportbibliothek verwenden können, müssen Sie die Klassenpfadabhängigkeiten Ihres App-Projekts in Ihrer Entwicklungsumgebung ändern.
So fügen Sie Ihrem Anwendungsprojekt eine Supportbibliothek hinzu:
- Öffnen Sie die Datei
build.gradle
Ihrer Anwendung. - Fügen Sie die Supportbibliothek zum Abschnitt
dependencies
hinzu.
Groovig
dependencies { ... implementation "androidx.emoji:emoji:28.0.0" }
Kotlin
dependencies { ... implementation("androidx.emoji:emoji:28.0.0") }
Konfiguration der herunterladbaren Schriftart wird initialisiert
Sie müssen EmojiCompat
initialisieren, um die Metadaten und das Schriftbild zu laden. Da die Initialisierung einige Zeit dauern kann, wird sie in einem Hintergrundthread ausgeführt.
Führe die folgenden Schritte aus, um EmojiCompat
mit der herunterladbaren Schriftartkonfiguration zu initialisieren:
- Erstellen Sie eine Instanz der
FontRequest
-Klasse und geben Sie die Zertifizierungsstelle des Schriftartanbieters, das Paket des Schriftartanbieters, die Schriftartabfrage und eine Liste von Hash-Sätzen für das Zertifikat an. Weitere Informationen zuFontRequest
finden Sie in der Dokumentation zu herunterladbaren Schriftarten im Abschnitt Herunterladbare Schriftarten programmatisch verwenden. - Erstellen Sie eine Instanz von
FontRequestEmojiCompatConfig
und geben Sie Instanzen vonContext
undFontRequest
an. - Initialisieren Sie
EmojiCompat
, indem Sie die Methodeinit()
aufrufen und die Instanz vonFontRequestEmojiCompatConfig
übergeben. - Verwenden Sie
EmojiCompat
-Widgets in Layout-XMLs. Wenn SieAppCompat
verwenden, lesen Sie den Abschnitt EmojiCompat-Widgets mit AppCompat verwenden.
Kotlin
class MyApplication : Application() { override fun onCreate() { super.onCreate() val fontRequest = FontRequest( "com.example.fontprovider", "com.example", "emoji compat Font Query", CERTIFICATES ) val config = FontRequestEmojiCompatConfig(this, fontRequest) EmojiCompat.init(config) } }
Java
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); FontRequest fontRequest = new FontRequest( "com.example.fontprovider", "com.example", "emoji compat Font Query", CERTIFICATES); EmojiCompat.Config config = new FontRequestEmojiCompatConfig(this, fontRequest); EmojiCompat.init(config); } }
<android.support.text.emoji.widget.EmojiTextView android:layout_width="wrap_content" android:layout_height="wrap_content"/> <android.support.text.emoji.widget.EmojiEditText android:layout_width="wrap_content" android:layout_height="wrap_content"/> <android.support.text.emoji.widget.EmojiButton android:layout_width="wrap_content" android:layout_height="wrap_content"/>
Weitere Informationen zur Konfiguration von EmojiCompat
mit der herunterladbaren Schriftartkonfiguration finden Sie in der Beispiel-App für die Emoji-Kompatibilität Java
| Kotlin.
Bibliothekskomponenten
- Widgets:
EmojiEditText
,EmojiTextView
,EmojiButton
- Standard-Widget-Implementierungen zur Verwendung von
EmojiCompat
mitTextView
,EditText
undButton
. EmojiCompat
- Öffentliche Hauptoberfläche für die Support Library. Sie führt alle externen Aufrufe aus und koordiniert mit den anderen Teilen des Systems.
EmojiCompat.Config
- Konfiguriert die zu erstellende Singleton-Instanz.
EmojiSpan
- : Eine
ReplacementSpan
-Unterklasse, die das Zeichen (Sequenzen) ersetzt und das Symbol rendert. - Schriftart
EmojiCompat
EmojiCompat
verwendet eine Schriftart zum Anzeigen von Emojis. Diese Schriftart ist eine modifizierte Version der Emoji-Schriftart unter Android. Die Schriftart wird so geändert:- Damit Emoji-Zeichen abwärtskompatibel sind, werden alle Emoji-Zeichen mit einem einzigen Unicode-Codepunkt im zusätzlichen privaten Nutzungsbereich-A von Unicode dargestellt, beginnend mit U+F0001.
-
Zusätzliche Emoji-Metadaten werden im Binärformat in die Schriftart eingefügt und zur Laufzeit von
EmojiCompat
geparst. Die Daten werden mit dem privaten Tag Emji in die Tabellemeta
der Schriftart eingebettet.
Konfigurationsoptionen
Sie können die Instanz EmojiCompat
verwenden, um das Verhalten von EmojiCompat
zu ändern. Sie können die folgenden Methoden aus der Basisklasse verwenden, um die Konfiguration festzulegen:
setReplaceAll()
: Legt fest, obEmojiCompat
alle gefundenen Emojis durchEmojiSpans
ersetzen soll. Standardmäßig versuchtEmojiCompat
herauszufinden, ob das System ein Emoji rendern kann, und ersetzt diese Emojis nicht. Wenntrue
festgelegt ist, ersetztEmojiCompat
alle gefundenen Emojis durchEmojiSpans
.setEmojiSpanIndicatorEnabled()
: Gibt an, obEmojiCompat
ein Emoji durch einEmojiSpan
ersetzt hat. Wenntrue
festgelegt ist, zeichnetEmojiCompat
einen Hintergrund fürEmojiSpan
. Diese Methode wird hauptsächlich zum Debugging verwendet.setEmojiSpanIndicatorColor()
: Legt die Farbe zur Kennzeichnung einesEmojiSpan
fest. Der Standardwert istGREEN
.registerInitCallback
: Informiert die App über den Status derEmojiCompat
-Initialisierung.
Kotlin
val config = FontRequestEmojiCompatConfig(...) .setReplaceAll(true) .setEmojiSpanIndicatorEnabled(true) .setEmojiSpanIndicatorColor(Color.GREEN) .registerInitCallback(object: EmojiCompat.InitCallback() { ... })
Java
EmojiCompat.Config config = new FontRequestEmojiCompatConfig(...) .setReplaceAll(true) .setEmojiSpanIndicatorEnabled(true) .setEmojiSpanIndicatorColor(Color.GREEN) .registerInitCallback(new InitCallback() {...})
Initialisierungs-Listener hinzufügen
Die Klassen EmojiCompat
und EmojiCompat
stellen die Methoden registerInitCallback()
und unregisterInitCallback()
bereit, um einen Initialisierungs-Callback zu registrieren. 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. Wenn die Initialisierung der EmojiCompat
-Supportbibliothek 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.
Mit der Methode getLoadState()
lässt sich jederzeit der Initialisierungsstatus prüfen. Sie gibt einen der folgenden Werte zurück: LOAD_STATE_LOADING
, LOAD_STATE_SUCCEEDED
oder LOAD_STATE_FAILED
.
EmojiCompat mit AppCompat-Widgets verwenden
Wenn Sie AppCompat widgets
verwenden, können Sie EmojiCompat
-Widgets verwenden, die von AppCompat widgets
aus erweitert werden.
- Fügen Sie die Supportbibliothek zum Abschnitt „Abhängigkeiten“ hinzu.
Groovig
dependencies { ... implementation "androidx.emoji:emoji-bundled:$version" }
Kotlin
dependencies { implementation("androidx.emoji:emoji-appcompat:$version") }
Groovig
dependencies { implementation "androidx.emoji:emoji-appcompat:$version" }
- Verwenden Sie
EmojiCompat
-AppCompat Widget
-Widgets in Layout-XMLs.
<android.support.text.emoji.widget.EmojiAppCompatTextView android:layout_width="wrap_content" android:layout_height="wrap_content"/> <android.support.text.emoji.widget.EmojiAppCompatEditText android:layout_width="wrap_content" android:layout_height="wrap_content"/> <android.support.text.emoji.widget.EmojiAppCompatButton android:layout_width="wrap_content" android:layout_height="wrap_content"/>
Konfiguration gebündelter Schriftarten
Die EmojiCompat
-Supportbibliothek ist auch in einer gebündelten Schriftartversion verfügbar. Dieses Paket enthält die Schriftart mit den eingebetteten Metadaten. Das Paket enthält auch ein BundledEmojiCompatConfig
, das AssetManager
verwendet, um die Metadaten und Schriftarten zu laden.
Hinweis:Die Schriftgröße wird in mehreren Megabyte angegeben.
Abhängigkeit von Supportbibliotheken hinzufügen
Damit Sie die EmojiCompat
-Supportbibliothek mit der Konfiguration gebündelter Schriftarten verwenden können, müssen Sie die Klassenpfadabhängigkeiten des App-Projekts in Ihrer Entwicklungsumgebung ändern.
So fügen Sie Ihrem Anwendungsprojekt eine Supportbibliothek hinzu:
- Öffnen Sie die Datei
build.gradle
Ihrer Anwendung. - Fügen Sie die Supportbibliothek zum Abschnitt
dependencies
hinzu.
Groovig
dependencies { ... implementation "androidx.emoji:emoji:28.0.0" }
Kotlin
dependencies { ... implementation("androidx.emoji:emoji:28.0.0") }
Gebündelte Schriftarten zum Konfigurieren von EmojiCompat verwenden
Führe die folgenden Schritte aus, um EmojiCompat
mit gebündelten Schriftarten zu konfigurieren:
- Verwenden Sie
BundledEmojiCompatConfig
, um eine Instanz vonEmojiCompat
zu erstellen und eine Instanz vonContext
bereitzustellen. - Rufen Sie die Methode
init()
auf, umEmojiCompat
zu initialisieren und die Instanz vonBundledEmojiCompatConfig
zu übergeben.
Kotlin
class MyApplication : Application() { override fun onCreate() { super.onCreate() val config = BundledEmojiCompatConfig(this) EmojiCompat.init(config) } }
Java
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); EmojiCompat.Config config = new BundledEmojiCompatConfig(this); EmojiCompat.init(config); ... } }
EmojiCompat ohne Widgets verwenden
EmojiCompat
verwendet EmojiSpan
, um korrekte Bilder zu rendern.
Daher muss jede CharSequence
in Spanned
-Instanzen mit EmojiSpans
konvertiert werden. Die Klasse EmojiCompat
bietet eine Methode zum Konvertieren von CharSequences
in Spanned
-Instanzen mit EmojiSpans
. Mit dieser Methode können Sie die verarbeiteten Instanzen anstelle des Rohstrings verarbeiten und im Cache speichern, was die Leistung Ihrer Anwendung verbessert.
Kotlin
val processed = EmojiCompat.get().process("neutral face \uD83D\uDE10")
Java
CharSequence processed = EmojiCompat.get().process("neutral face \uD83D\uDE10");
EmojiCompat für IMEs verwenden
Mithilfe der EmojiCompat
-Supportbibliothek können Tastaturen die Emojis rendern, die von der Anwendung unterstützt werden, mit der sie interagieren. IMEs können mit der Methode hasEmojiGlyph()
prüfen, ob EmojiCompat
Emojis rendern kann. Diese Methode verwendet die 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 der EmojiCompat
-Supportbibliothek prüfen, um festzustellen, welche Emojis in der Palette gerendert werden sollen. Zum Prüfen der Version (falls verfügbar) muss die Tastatur prüfen, ob die folgenden Tasten im EditorInfo.extras
-Bundle vorhanden sind:
EDITOR_INFO_METAVERSION_KEY
EDITOR_INFO_REPLACE_ALL_KEY
Wenn der Schlüssel im Bundle vorhanden ist, stellt der Wert die Version der Emoji-Metadaten dar, die von der Anwendung verwendet werden. Wenn dieser Schlüssel nicht vorhanden ist, verwendet die Anwendung EmojiCompat
nicht.
Wenn der Schlüssel vorhanden und auf true
gesetzt ist, bedeutet das, dass die Anwendung die Methode SetReplaceAll()
aufgerufen hat. Weitere Informationen zur EmojiCompat
-Konfiguration finden Sie im Abschnitt Konfigurationsoptionen.
Nachdem die Schlüssel im EditorInfo.extras
-Bundle empfangen wurden, kann die Tastatur mit der Methode hasEmojiGlyph()
prüfen, ob die App ein bestimmtes Emoji rendern kann. Dabei ist metadataVersion
der Wert für EDITOR_INFO_METAVERSION_KEY
.
EmojiCompat mit benutzerdefinierten Widgets verwenden
Sie können jederzeit die Methode process()
verwenden, um das CharSequence
in Ihrer Anwendung vorzuverarbeiten und es jedem Widget hinzuzufügen, das Spanned
-Instanzen rendern kann, z. B. TextView
. Darüber hinaus bietet EmojiCompat
die folgenden Widget-Hilfsklassen, mit denen Sie Ihre benutzerdefinierten Widgets mit minimalem Aufwand mit Emoji-Unterstützung anreichern können.
- Beispiel für TextView
- Beispiel für Bearbeitungstext
Kotlin
class MyTextView(context: Context) : AppCompatTextView(context) { private val emojiTextViewHelper: EmojiTextViewHelper by lazy(LazyThreadSafetyMode.NONE) { EmojiTextViewHelper(this).apply { updateTransformationMethod() } } override fun setFilters(filters: Array<InputFilter>) { super.setFilters(emojiTextViewHelper.getFilters(filters)) } override fun setAllCaps(allCaps: Boolean) { super.setAllCaps(allCaps) emojiTextViewHelper.setAllCaps(allCaps) } }
Java
public class MyTextView extends AppCompatTextView { ... public MyTextView(Context context) { super(context); init(); } ... private void init() { getEmojiTextViewHelper().updateTransformationMethod(); } @Override public void setFilters(InputFilter[] filters) { super.setFilters(getEmojiTextViewHelper().getFilters(filters)); } @Override public void setAllCaps(boolean allCaps) { super.setAllCaps(allCaps); getEmojiTextViewHelper().setAllCaps(allCaps); } private EmojiTextViewHelper getEmojiTextViewHelper() { ... } }
Kotlin
class MyEditText(context: Context) : AppCompatEditText(context) { private val emojiEditTextHelper: EmojiEditTextHelper by lazy(LazyThreadSafetyMode.NONE) { EmojiEditTextHelper(this).also { super.setKeyListener(it.getKeyListener(keyListener)) } } override fun setKeyListener(input: KeyListener?) { input?.also { super.setKeyListener(emojiEditTextHelper.getKeyListener(it)) } } override fun onCreateInputConnection(outAttrs: EditorInfo): InputConnection { val inputConnection: InputConnection = super.onCreateInputConnection(outAttrs) return emojiEditTextHelper.onCreateInputConnection( inputConnection, outAttrs ) as InputConnection } }
Java
public class MyEditText extends AppCompatEditText { ... public MyEditText(Context context) { super(context); init(); } ... private void init() { super.setKeyListener(getEmojiEditTextHelper().getKeyListener(getKeyListener())); } @Override public void setKeyListener(android.text.method.KeyListener keyListener) { super.setKeyListener(getEmojiEditTextHelper().getKeyListener(keyListener)); } @Override public InputConnection onCreateInputConnection(EditorInfo outAttrs) { InputConnection inputConnection = super.onCreateInputConnection(outAttrs); return getEmojiEditTextHelper().onCreateInputConnection(inputConnection, outAttrs); } private EmojiEditTextHelper getEmojiEditTextHelper() { ... } }
Häufig gestellte Fragen
- Wie starte ich den Download von Schriftarten?
- Wie lange dauert die Initialisierung?
- Wie viel Speicher verwendet die EmojiCompat-Bibliothek?
- Kann ich EmojiCompat für eine benutzerdefinierte TextView verwenden?
- Was passiert, wenn ich Widgets in Layout-XMLs auf Geräten mit Android 4.4 (API-Level 19) oder niedriger hinzufüge?
Die Emoji-Schriftarten werden auf die erste Anfrage heruntergeladen, wenn sie nicht auf dem Gerät vorhanden sind. Die Downloadplanung ist für die App transparent.
Nachdem die Schriftart heruntergeladen wurde, dauert es etwa 150 Millisekunden, EmojiCompat
zu initialisieren.
Derzeit ist die Datenstruktur, mit der das Emoji gefunden wird, in den Arbeitsspeicher der Anwendung geladen und belegt ca. 200 KB.
Ja. EmojiCompat bietet Hilfsklassen für benutzerdefinierte Widgets. Es ist auch möglich, einen bestimmten String vorzuverarbeiten und in Spanned
zu konvertieren. Weitere Informationen zu Widget-Hilfsklassen finden Sie im Abschnitt EmojiCompat mit benutzerdefinierten Widgets verwenden.
Du kannst die EmojiCompat
-Supportbibliothek oder deren Widgets in deine Apps einbinden, die Geräte mit Android 4.4 (API-Level 19) oder niedriger unterstützen. Wird auf einem Gerät jedoch eine Android-Version vor API-Level 19 ausgeführt, befinden sich EmojiCompat
und die zugehörigen Widgets im Zustand „Kein Vorgang“. Das bedeutet, dass sich EmojiTextView
genau wie eine reguläre TextView
verhält.
EmojiCompat
-Instanz. Sie wechselt sofort in den Status LOAD_STATE_SUCCEEDED
, wenn Sie die Methode init()
aufrufen.
Weitere Informationen
Wenn Sie weitere Informationen zur Verwendung der EmojiCompat
-Bibliothek erhalten möchten, sehen Sie sich EmojiCompat an.