Emojis einblenden

Der Standardsatz von Emojis wird jährlich von Unicode aktualisiert, da die Nutzung von Emojis für alle Arten von Apps rasant zunimmt.

Wenn in deiner App Internetinhalte oder Texteingabemöglichkeiten zur Verfügung stehen, empfehlen wir dringend, die neuesten Emoji-Schriftarten zu unterstützen. Andernfalls wird später möglicherweise ein kleines quadratisches Feld mit dem Namen Tofu (Mittelpunkt) oder andere falsch gerenderte Emoji-Sequenzen angezeigt.

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

Hier einige 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)

BOM März 2023 (Compose UI 1.4) unterstützt 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 moderne Emoji-Unterstützung.

Am besten testen Sie die neuesten Emojis in Ihrer App mit einem echten Gerät mit API 30 oder niedriger.

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

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

Interoperabilität

Wenn deine Anwendung sowohl „Views“ als auch „Compose“ im selben Activity verwendet, solltest du darauf achten, dass du die richtigen APIs verwendest, um Emojis richtig zu konfigurieren. In den folgenden Abschnitten wird beschrieben, wann Sie welche APIs verwenden sollten.

Wird verlängert von ComponentActivity

Wenn Ihr Activity aus der Funktion „Compose“ ComponentActivity statt aus AppCompatActivity stammt, folgen Sie der Anleitung Support Emojis ohne AppCompat.

Da Sie AppCompatActivity nicht erweitern, fügen Sie die Emoji2-Bibliothek Ihren Abhängigkeiten 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
            }
        }
    }
}

Führen Sie dann in Ihrer XML-Datei folgende Schritte aus:

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

Wird verlängert von AppCompatActivity

Wenn Activity von AppCompatActivity ausgeht, können Sie ComposeView verwenden, um zusammensetzbare Funktionen aufzurufen. Wenn du Textzusammensetzbare verwendest, werden Emojis in allen Android-Versionen korrekt gerendert.

Wenn Sie von AppCompatActivity erweitern, infließen Sie TextView aus der XML-Datei, damit Emojis korrekt gerendert werden.

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

  • außerhalb von ComposeView in Activity. Im folgenden Snippet werden 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 Sie einen Text mit AndroidView innerhalb von ComposeView aufblähen möchten, verwenden Sie AppCompatTextView, um Emojis richtig 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 Interoperability APIs.

Fehlerbehebung

Wenn Sie anstelle des Emojis Tofu (Zahl) sehen, prüfen Sie zuerst, ob das Problem durch Ihr Testgerät verursacht wird. Es gibt einige wichtige Dinge, die Sie überprüfen können: