Die EmojiCompat
-Supportbibliothek zielt darauf ab,
Android-Geräte mit den neuesten Emojis auf dem neuesten Stand halten. Es verhindert, dass deine App
fehlende Emoji-Zeichen in Form von ☐
gibt an, dass auf Ihrem Gerät keine Schriftart zum Anzeigen des Textes vorhanden ist. Von
mithilfe der EmojiCompat
-Supportbibliothek
Ihre App-Nutzer müssen nicht auf Updates des Android-Betriebssystems warten,
Emoji.
Weitere Informationen finden Sie in den folgenden verwandten Ressourcen:
- Beispiel-App für Emoji-Kompatibilität <ph type="x-smartling-placeholder"></ph> Java | Kotlin
Wie funktioniert EmojiCompat?
Die EmojiCompat
-Supportbibliothek bietet
Klassen zur Implementierung abwärtskompatibler Emoji-Unterstützung auf Geräten mit
Android 4.4 (API-Level 19) und höher Sie können
EmojiCompat
mit gebündeltem oder
Schriftarten herunterladen können. Weitere Informationen zur Konfiguration finden Sie in der
folgenden Abschnitten:
EmojiCompat
identifiziert ein Emoji für ein bestimmtes Element
CharSequence
, ersetzt sie durch
EmojiSpans
, falls erforderlich, und
die Emoji-Glyphen gerendert. In Abbildung 2 ist der Prozess demonstriert.
Konfiguration für herunterladbare Schriftarten
In der Konfiguration für herunterladbare Schriftarten wird die Unterstützung für herunterladbare Schriftarten verwendet
um eine Emoji-Schriftart herunterzuladen. Außerdem werden die erforderlichen
Emoji-Metadaten, die EmojiCompat
muss die Supportbibliothek mit den neuesten Unicode-Versionen
Spezifikation zu ändern.
Abhängigkeit von Supportbibliothek hinzufügen
So verwenden Sie die EmojiCompat
-Supportbibliothek:
müssen Sie die Klassenpfadabhängigkeiten Ihres App-Projekts innerhalb der
Entwicklungsumgebung.
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.
Cool
dependencies { ... implementation "androidx.emoji:emoji:28.0.0" }
Kotlin
dependencies { ... implementation("androidx.emoji:emoji:28.0.0") }
Herunterladbare Schriftart initialisieren Konfiguration
Sie müssen EmojiCompat
initialisieren, um
die Metadaten und die Schriftart. Da die Initialisierung einige Zeit dauern kann,
wird der Initialisierungsprozess
in einem Hintergrundthread ausgeführt.
Zum Initialisieren von EmojiCompat
mit dem
Konfiguration für Schriftarten herunterladen möchten, führen Sie die folgenden Schritte aus:
- Instanz von
FontRequest
erstellen und geben die Autorität des Schriftartanbieters, das Paket des Schriftartanbieters, die Schriftartabfrage und eine Liste von Hash-Sätzen für das Zertifikat. Weitere Informationen Informationen zuFontRequest
, siehe zu den Herunterladbare Schriftarten programmatisch verwenden im Bereich Herunterladbare Schriftarten Dokumentation. - Instanz von erstellen
FontRequestEmojiCompatConfig
und stellen Instanzen vonContext
undFontRequest
- Initialisieren Sie
EmojiCompat
durch Aufrufen derinit()
und übergeben die InstanzFontRequestEmojiCompatConfig
EmojiCompat
-Widgets im Layout verwenden XML-Dateien. Wenn SieAppCompat
verwenden, finden Sie in der 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
EmojiCompat
mit der herunterladbaren Schriftart
Konfiguration, rufen Sie die Beispiel-App zur Emoji-Kompatibilität auf.
Java
| Kotlin.
Bibliothekskomponenten
<ph type="x-smartling-placeholder"> <ph type="x-smartling-placeholder">- </ph>
- Widgets:
EmojiEditText
,EmojiTextView
,EmojiButton
- Standard-Widgetimplementierungen
EmojiCompat
mitTextView
,EditText
undButton
EmojiCompat
- Öffentliche Hauptoberfläche der Supportbibliothek. Sie bietet alle externe Aufrufe und Koordinaten mit den anderen Teilen des Systems.
EmojiCompat.Config
- Konfiguriert die zu erstellende Singleton-Instanz.
EmojiSpan
- : Eine abgeleitete
ReplacementSpan
-Klasse, die die Klasse (Sequenzen) und rendert die Glyphe. - Schriftart
EmojiCompat
EmojiCompat
verwendet zum Anzeigen eine Schriftart Emoji. Diese Schriftart ist eine modifizierte Version des Schriftart für Android-Emojis: Die Schriftart wird wie folgt geändert: <ph type="x-smartling-placeholder">- </ph>
- Um die Abwärtskompatibilität zum Rendern von Emojis sicherzustellen, werden alle Emojis werden mit einem einzelnen Unicode-Codepunkt in Unicodes ergänzende private Nutzungsbereich-A, beginnend mit U+F0001.
-
Zusätzliche Emoji-Metadaten werden in einem Binärformat in die Schriftart und
wird zur Laufzeit geparst von
EmojiCompat
Die Daten sind eingebettet in der Tabellemeta
der Schriftart mit dem privaten Tag Emji
Konfigurationsoptionen
Mit der Instanz EmojiCompat
können Sie
EmojiCompat
-Verhalten ändern. Sie können
die folgenden Methoden aus der Basisklasse, um die Konfiguration festzulegen:
setReplaceAll()
: Bestimmt, obEmojiCompat
alle gefundenen Emojis ersetzen durchEmojiSpans
StandardmäßigEmojiCompat
gibt sein Bestes, feststellen, ob das System ein Emoji rendern kann, und diese nicht ersetzen Emoji. Wenntrue
festgelegt ist, gilt Folgendes:EmojiCompat
ersetzt alle gefundenen Emojis mitEmojiSpans
.setEmojiSpanIndicatorEnabled()
: Gibt an, obEmojiCompat
hat ein Emoji ersetzt durch eineEmojiSpan
Wenntrue
festgelegt ist, gilt Folgendes:EmojiCompat
zeichnet einen Hintergrund für dasEmojiSpan
Diese Methode wird hauptsächlich zur Fehlerbehebung.setEmojiSpanIndicatorColor()
: Legt die Farbe zur Angabe einesEmojiSpan
fest. Der Standardwert istGREEN
.registerInitCallback
: Informiert die App über den Status derEmojiCompat
wird initialisiert.
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
EmojiCompat
und
EmojiCompat
Kurse
bereitstellen
registerInitCallback()
und
unregisterInitCallback()
-Methoden zum Registrieren eines Initialisierungs-Callbacks. Um diese Methoden zu verwenden, erstellen Sie
eine Instanz des
Klasse EmojiCompat.InitCallback
. Anruf
diese Methoden hinzu und übergeben Sie die Instanz der
Klasse EmojiCompat.InitCallback
. Wenn der Parameter
Initialisierung der EmojiCompat
-Unterstützung
erfolgreich war, hat die EmojiCompat
in der Klasse
onInitialized()
. Wenn die Bibliothek
nicht initialisiert wird, wird die EmojiCompat
in der Klasse
onFailed()
.
Um den Initialisierungsstatus zu überprüfen, rufen Sie die Methode
getLoadState()
. Es wird einer der folgenden Werte zurückgegeben:
LOAD_STATE_LOADING
,
LOAD_STATE_SUCCEEDED
,
oder LOAD_STATE_FAILED
.
EmojiCompat mit AppCompat-Widgets verwenden
Wenn Sie AppCompat widgets
verwenden,
können EmojiCompat
-Widgets verwenden, die
von AppCompat widgets
.
- Fügen Sie die Supportbibliothek dem Abschnitt für Abhängigkeiten hinzu.
Cool
dependencies { ... implementation "androidx.emoji:emoji-bundled:$version" }
Kotlin
dependencies { implementation("androidx.emoji:emoji-appcompat:$version") }
Cool
dependencies { implementation "androidx.emoji:emoji-appcompat:$version" }
EmojiCompat
verwendenAppCompat Widget
Widgets im Layout XML-Dateien.
<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"/>
Gebündelte Schriftarten konfigurieren
Die EmojiCompat
-Supportbibliothek ist auch
als gebündelte Schriftversion verfügbar. Dieses Paket enthält die Schriftart mit dem
eingebettete Metadaten. Das Paket enthält auch ein
BundledEmojiCompatConfig
zum Laden der Metadaten mit AssetManager
und Schriftarten.
Hinweis:Die Schriftgröße wird in mehreren Megabyte.
Abhängigkeit von Supportbibliothek hinzufügen
So verwenden Sie die EmojiCompat
-Supportbibliothek
mit gebündelter Schriftartkonfiguration, müssen Sie die
Klassenpfadabhängigkeiten innerhalb Ihrer Entwicklungsumgebung.
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.
Cool
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
So verwenden Sie gebündelte Schriftarten für die Konfiguration
EmojiCompat
, führen Sie die folgenden Schritte aus:
BundledEmojiCompatConfig
verwenden zum Erstellen einer Instanz vonEmojiCompat
und geben Sie eine Instanz vonContext
an.- Rufen Sie die Methode
init()
zum InitialisierenEmojiCompat
und übergeben Sie die Instanz vonBundledEmojiCompatConfig
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 die richtigen Bilder zu rendern.
Daher muss jede gegebene CharSequence
in
Spanned
Instanzen mit
EmojiSpans
Die
Die Klasse EmojiCompat
bietet eine Methode zum
CharSequences
konvertieren in
Spanned
Instanzen mit
EmojiSpans
. Mit dieser Methode
können Sie die verarbeiteten Instanzen
statt der Rohzeichenfolge verarbeiten und zwischenspeichern.
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
Tastaturen können die Emojis rendern, die von der jeweiligen Anwendung unterstützt werden.
mit denen Sie interagieren. IMEs können den
hasEmojiGlyph()
Methode zur Prüfung, ob EmojiCompat
kompatibel ist
für das Rendern eines Emojis. Diese Methode nimmt CharSequence
von
ein Emoji und gibt true
zurück, wenn
EmojiCompat
kann Folgendes erkennen und rendern:
Emoji.
Die Tastatur kann auch die Version des
EmojiCompat
-Supportbibliothek, die von der App
unterstützt, um zu bestimmen, welches Emoji in der Palette gerendert werden soll. Um die
Version, falls verfügbar, muss die Tastatur überprüfen, ob die folgenden
sind Schlüssel in der
EditorInfo.extras
Set:
EDITOR_INFO_METAVERSION_KEY
EDITOR_INFO_REPLACE_ALL_KEY
Wenn der Schlüssel im Bundle vorhanden ist, stellt der Wert den
der Emoji-Metadaten, die die App verwendet. Wenn dieser Schlüssel nicht
vorhanden ist, verwendet die App EmojiCompat
nicht.
Wenn der Schlüssel vorhanden und auf true
festgelegt ist, bedeutet dies,
hat die App die
SetReplaceAll()
. Weitere Informationen zu
EmojiCompat
-Konfiguration,
Weitere Informationen finden Sie unter Konfigurationsoptionen.
.
Nachdem Sie die Schlüssel im
EditorInfo.extras
Set,
kann die Tastatur die
hasEmojiGlyph()
wobei metadataVersion
der Wert für
EDITOR_INFO_METAVERSION_KEY
,
prüfen, ob die App ein bestimmtes Emoji rendern kann.
EmojiCompat mit benutzerdefinierten Widgets verwenden
Du kannst jederzeit die process()
verwenden
um CharSequence
in Ihrer App vorzuverarbeiten und
in jedes Widget, das Spanned
-Instanzen rendern kann; für
Beispiel: TextView
. Außerdem
EmojiCompat
stellt das folgende Widget bereit
können Sie Ihre benutzerdefinierten Widgets mit Emoji-Unterstützung
mit minimalem Aufwand.
- Beispiel-Textansicht
- Beispiel für EditText
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 der Schriftart?
- Wie lange dauert die Initialisierung?
- Wie viel Speicher nutzt die EmojiCompat-Supportbibliothek?
- Kann ich EmojiCompat für eine benutzerdefinierte TextView verwenden?
- Was passiert, wenn ich Widgets in Layout-XMLs auf Geräten hinzufüge, Android 4.4 (API-Level 19) oder niedriger ausgeführt wird?
Die Emoji-Schriftarten werden bei der ersten Anfrage heruntergeladen, sofern sie nicht vorhanden sind. auf dem Gerät. Die Downloadplanung ist für die App transparent.
Nach dem Herunterladen der Schriftart dauert es etwa 150 Millisekunden,
um EmojiCompat
zu initialisieren.
Derzeit wird die Datenstruktur zum Finden des Emojis in der App und etwa 200 KB.
Ja. EmojiCompat bietet Hilfsklassen für benutzerdefinierte Widgets. Es ist auch
einen bestimmten String vorverarbeiten und in
Spanned
Weitere Informationen zum Widget-Assistenten
finden Sie in den
EmojiCompat mit benutzerdefinierten Widgets verwenden
.
Sie können den EmojiCompat
Supportbibliothek oder die zugehörigen Widgets in Ihren Apps, die Geräte unterstützen
mit Android 4.4 (API-Level 19) oder niedriger. Wenn ein Gerät jedoch
auf einer Android-Version vor API-Level 19,
EmojiCompat
und die zugehörigen Widgets befinden sich in einer
„keine Operation“ Bundesstaat. Das bedeutet, dass
EmojiTextView
verhält sich genau
wie eine normale TextView
.
EmojiCompat
-Instanz; es sofort
in eine
LOAD_STATE_SUCCEEDED
wenn Sie die Funktion
init()
.
Weitere Informationen
Weitere Informationen zur Verwendung der
EmojiCompat
in der Mediathek, um dir EmojiCompat anzusehen.