Emojis einblenden

Der Standard-Emoji-Satz wird jährlich aktualisiert von Unicode: Die Nutzung von Emojis nimmt zu. für alle Arten von Apps.

Wenn Ihre App Internetinhalte oder Texteingabe anzeigt, empfehlen wir Ihnen dringend, empfehlen, die neuesten Emoji-Schriftarten zu unterstützen. Andernfalls kann es passieren, dass später Wird als kleines quadratisches Feld namens Tofu (☐) oder ein anderes falsch gerendertes Element angezeigt Emoji-Sequenzen.

Unter Android 11 (API-Level 30) und niedriger kann die Emoji-Schriftart nicht aktualisiert werden. Apps, die sie unter diesen Versionen anzeigen, müssen 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 Emojis Version, einschließlich Abwärtskompatibilität mit älteren Android-Versionen auf API 21.

Für diese Unterstützung sind keine Änderungen an deiner App erforderlich, wenn du Text und TextField (Material 2 oder Material 3) oder BasicText und BasicTextField, du erhältst moderne Emoji-Unterstützung, sofort einsatzbereit.

Am besten testest du die neuesten Emojis in deiner App mit der ein echtes Gerät mit API 30 oder niedriger.

Wenn du eine benutzerdefinierte Emoji-Lösung verwendest oder das Standard-Emoji deaktivieren musst aus anderen Gründen in Compose ändern, können Sie PlatformTextStyle(emojiSupportMatch):

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

Interoperabilität

Wenn deine App im selben Activity sowohl „Aufrufe“ als auch „Schreiben“ verwendet, verwenden die entsprechenden APIs, um Emojis richtig zu konfigurieren. Die folgenden beschreiben, wann die einzelnen APIs verwendet werden.

Wird verlängert von ComponentActivity

Wenn Activity auf „Schreiben“ ComponentActivity statt auf AppCompatActivity, folgen Sie dem Support-Emoji ohne AppCompat. Anleitung.

Da Sie AppCompatActivity nicht erweitern, fügen Sie das Emoji2-Element hinzu Bibliothek zu Ihren Abhängigkeiten hinzu und verwenden Sie EmojiTextView in Ihren Ansichten. statt des Widgets TextView verwenden, 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"
    />

Wird verlängert von AppCompatActivity

Wenn sich Ihr Activity-Gerät von AppCompatActivity erstreckt, können Sie Folgendes verwenden: ComposeView, um zusammensetzbare Funktionen aufzurufen. Emojis werden korrekt gerendert Android-Versionen, wenn Sie zusammensetzbare Textfunktionen verwenden

Wenn Sie eine Erweiterung von AppCompatActivity ausführen, blähen Sie TextView aus XML auf. damit die Emojis richtig gerendert werden.

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

  • außerhalb von ComposeView, in 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 anstelle des Emojis Tofu (☐) angezeigt wird, prüfen Sie zuerst, ob das Problem Ihrem spezifischen Testgerät. Sie können Folgendes überprüfen: