Emojis einblenden

Die Standard-Emojis werden jährlich von Unicode aktualisiert, da die Emoji-Nutzung in allen Arten von Apps rapide zunimmt.

Wenn Ihre App Internetinhalte anzeigt oder eine Texteingabe ermöglicht, empfehlen wir dringend, die neuesten Emoji-Schriftarten zu unterstützen. Andernfalls werden spätere Emojis möglicherweise als kleines quadratisches Kästchen namens Tofu (☐) oder andere falsch gerenderte Emoji-Sequenzen angezeigt.

Bei Android-Versionen 11 (API-Level 30) und niedriger kann die Emoji-Schriftart nicht aktualisiert werden. Apps, in denen Emojis in diesen Versionen angezeigt werden, müssen daher manuell aktualisiert werden.

Im Folgenden finden Sie 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 BOM vom März 2023 (Compose UI 1.4) unterstützt die aktuelle Emoji-Version und ist abwärtskompatibel mit älteren Android-Versionen bis API 21.

Für diese Unterstützung sind keine Änderungen an Ihrer App erforderlich. Wenn Sie Text und TextField (Material 2 oder Material 3) oder BasicText und BasicTextField verwenden, wird moderne Emoji-Unterstützung standardmäßig unterstützt.

Die neuesten Emojis in Ihrer App lassen sich am besten auf einem echten Gerät mit API 30 oder niedriger testen.

Wenn du eine benutzerdefinierte Emoji-Lösung verwendest oder die Standard-Emoji-Auflösung aus einem anderen Grund deaktivieren musst, kannst du PlatformTextStyle(emojiSupportMatch) verwenden:

Text(
    text = "Hello $EMOJI_TEXT",
    style = TextStyle(
        platformStyle = PlatformTextStyle(
            emojiSupportMatch = EmojiSupportMatch.None
        )/* ... */
    )
)

Interoperabilität

Wenn Ihre App sowohl „Ansichten“ als auch „Schreiben“ in derselben Activity verwendet, müssen Sie die entsprechenden APIs verwenden, um Emojis richtig zu konfigurieren. In den folgenden Abschnitten wird beschrieben, wann Sie die einzelnen APIs verwenden sollten.

Verlängerung von ComponentActivity

Wenn Activity aus „Compose“ ComponentActivity statt AppCompatActivity stammt, folgen Sie der Anleitung Support-Emoji ohne AppCompat.

Da Sie AppCompatActivity nicht erweitern, fügen Sie den Abhängigkeiten die Emoji2-Bibliothek hinzu und verwenden Sie EmojiTextView in Ihren Ansichten anstelle des Widgets TextView, wie im folgenden Snippet gezeigt:

class MainActivity : ComponentActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val emojiTextView: EmojiTextView = findViewById(R.id.emoji_text_view)
        emojiTextView.text = getString(R.string.emoji_text_view, EMOJI_TEXT)

        val composeView: ComposeView = findViewById(R.id.compose_view)

        composeView.apply {
            setContent {
                // compose code
            }
        }
    }
}

Gehen Sie dann in Ihrer XML-Datei so vor:

<androidx.emoji2.widget.EmojiTextView
    android:id="@+id/emoji_text_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    />

Verlängerung von AppCompatActivity

Wenn Activity von AppCompatActivity ausgeht, können Sie mit ComposeView zusammensetzbare Funktionen aufrufen. Emojis werden bei Verwendung von Text-Kompositen in allen Android-Versionen korrekt gerendert.

Wenn du eine Erweiterung von AppCompatActivity ausführst, blähe TextView aus XML auf, damit Emojis korrekt gerendert werden.

Dies gilt, wenn Sie die XML-Datei künstlich in die Höhe treiben:

  • außerhalb von ComposeView, in Activity. Wie Sie sehen, wird im folgenden Snippet AppCompatActivity und TextView verwendet:

class MyActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val emojiTextView: TextView = findViewById(R.id.emoji_text_view)
        emojiTextView.text = getString(R.string.emoji_text_view, EMOJI_TEXT)

        val composeView: ComposeView = findViewById(R.id.compose_view)

        composeView.apply {
            setContent {
                // compose code
            }
        }
    }
}

class MyActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContentView(
            ComposeView(this).apply {
                setContent {
                    Column {
                        Text(EMOJI_TEXT)

                        AndroidViewBinding(ExampleViewBinding::inflate) {
                            emojiTextView.text = EMOJI_TEXT
                        }
                    }
                }
            }
        )
    }
}

Wenn du einen Text mit AndroidView in ComposeView maximieren möchtest, verwende AppCompatTextView, um Emojis korrekt zu rendern:

class MyActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContentView(
            ComposeView(this).apply {
                setContent {
                    Column {
                        Text(EMOJI_TEXT)

                        AndroidView(
                            factory = { context -> AppCompatTextView(context) },
                            update = { it.text = EMOJI_TEXT }
                        )
                    }
                }
            }
        )
    }
}

Weitere Informationen finden Sie in der Dokumentation zu Interoperabilitäts-APIs.

Fehlerbehebung

Wenn anstelle des Emojis Tofu (☐) angezeigt wird, prüfen Sie zuerst, ob das Problem bei Ihrem Testgerät vorliegt. Sie können Folgendes prüfen: