Emojis einblenden

Der Standardsatz an Emojis wird jährlich von Unicode aktualisiert, da die Verwendung von Emojis in allen Arten von Apps rasant zunimmt.

Wenn Ihre App Internetinhalte anzeigt oder Texteingaben ermöglicht, empfehlen wir dringend, die neuesten Emoji-Schriftarten zu unterstützen. Andernfalls werden neuere Emojis möglicherweise als kleines quadratisches Kästchen, sogenanntes 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, die Emojis in diesen Versionen anzeigen, müssen daher manuell aktualisiert werden.

Im Folgenden finden Sie Beispiele für moderne Emojis.

Beispiele Version
🫩 🪉 🇨🇶 16.0 (September 2024)
🐦‍🔥 🧑‍🧑‍🧒‍🧒 👩🏽‍🦽‍➡️ 🇲🇶 15.1 (September 2023)
🩷 🫸🏼 🐦‍⬛ 15.0 (September 2022)
🫠 🫱🏼‍🫲🏿 🫰🏽 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) bietet Unterstützung für die neueste Emoji Version, einschließlich Abwärtskompatibilität 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, erhalten Sie sofort Unterstützung für moderne Emojis.

Die beste Möglichkeit, die neuesten Emojis in Ihrer App zu testen, ist die Verwendung eines echten Geräts mit API 30 oder niedriger.

Wenn Sie eine benutzerdefinierte Emoji-Lösung verwenden oder die Standard-Emoji Auflösung in Compose aus einem anderen Grund deaktivieren müssen, können Sie PlatformTextStyle(emojiSupportMatch) verwenden:

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

Interoperabilität

Wenn Ihre App sowohl Views als auch Compose in derselben Activity verwendet, müssen Sie die entsprechenden APIs verwenden, um Emojis korrekt zu konfigurieren. In den folgenden Abschnitten wird beschrieben, wann die einzelnen APIs verwendet werden sollten.

Erweitern von ComponentActivity

Wenn Ihre Activity von Compose ComponentActivity anstelle von AppCompatActivity erweitert wird, folgen Sie der Anleitung unter Emojis ohne AppCompat unterstützen.

Da Sie AppCompatActivity nicht erweitern, fügen Sie die Emoji2 Bibliothek zu Ihren Abhängigkeiten hinzu und verwenden Sie in Ihren Ansichten EmojiTextView 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
            }
        }
    }
}

Dann in Ihrer XML-Datei:

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

Erweitern von AppCompatActivity

Wenn Ihre Activity von AppCompatActivity erweitert wird, können Sie ComposeView verwenden, um zusammensetzbare Funktionen aufzurufen. Emojis werden in allen Android-Versionen korrekt gerendert, wenn Sie zusammensetzbare Textfunktionen verwenden.

Wenn Sie AppCompatActivity erweitern, blähen Sie TextView aus XML auf, damit Emojis korrekt gerendert werden.

Dies gilt, wenn Sie die XML-Datei aufblähen:

  • außerhalb von ComposeView in der Activity. Beachten Sie die Verwendung von AppCompatActivity und TextView im folgenden Snippet:

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 Sie einen Text mit AndroidView innerhalb von ComposeView aufblähen möchten, verwenden Sie 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 Sie anstelle des Emojis Tofu (☐) sehen, prüfen Sie zuerst, ob das Problem an Ihrem spezifischen Testgerät liegt. Es gibt einige Hauptpunkte, die Sie überprüfen können: