Emoji-Kompatibilität

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.

<ph type="x-smartling-placeholder">
</ph> Geräte, auf denen Emojis angezeigt werden
Abbildung 1: Emoji-Vergleich

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.

<ph type="x-smartling-placeholder">
</ph> EmojiCompat-Prozess
Abbildung 2: EmojiCompat-Prozess

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:

  1. Öffnen Sie die Datei build.gradle Ihrer Anwendung.
  2. 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:

  1. 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 zu FontRequest, siehe zu den Herunterladbare Schriftarten programmatisch verwenden im Bereich Herunterladbare Schriftarten Dokumentation.
  2. Instanz von erstellen FontRequestEmojiCompatConfig und stellen Instanzen von Context und FontRequest
  3. Initialisieren Sie EmojiCompat durch Aufrufen der init() und übergeben die Instanz FontRequestEmojiCompatConfig
  4. 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);
       }
    }
    
  5. EmojiCompat-Widgets im Layout verwenden XML-Dateien. Wenn Sie AppCompat verwenden, finden Sie in der EmojiCompat-Widgets mit AppCompat verwenden .
  6. <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> Bibliothekskomponenten im EmojiCompat-Prozess
Abbildung 3: Bibliothekskomponenten im EmojiCompat-Prozess
<ph type="x-smartling-placeholder">
</ph>
Widgets: EmojiEditText, EmojiTextView, EmojiButton
Standard-Widgetimplementierungen EmojiCompat mit TextView, EditText und Button
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 Tabelle meta 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:

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.

  1. 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"
          }
          
  2. EmojiCompat verwenden AppCompat Widget Widgets im Layout XML-Dateien.
  3. <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:

  1. Öffnen Sie die Datei build.gradle Ihrer Anwendung.
  2. 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:

  1. BundledEmojiCompatConfig verwenden zum Erstellen einer Instanz von EmojiCompat und geben Sie eine Instanz von Context an.
  2. Rufen Sie die Methode init() zum Initialisieren EmojiCompat und übergeben Sie die Instanz von BundledEmojiCompatConfig

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:

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

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() {
       ...
   }
}
Beispiel für EditText

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?
  • 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.

  • Wie lange dauert die Initialisierung?
  • Nach dem Herunterladen der Schriftart dauert es etwa 150 Millisekunden, um EmojiCompat zu initialisieren.

  • Wie viel Speicher nutzt die EmojiCompat-Supportbibliothek?
  • Derzeit wird die Datenstruktur zum Finden des Emojis in der App und etwa 200 KB.

  • Kann ich EmojiCompat für eine benutzerdefinierte TextView verwenden?
  • 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 .

  • Was passiert, wenn ich Widgets in Layout-XMLs auf Geräten hinzufüge, Android 4.4 (API-Level 19) oder niedriger ausgeführt wird?
  • 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.