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
inActivity
. Im folgenden Snippet werdenAppCompatActivity
undTextView
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 } } } }
- innerhalb von
ComposeView
über eine Ansichtsbindung mithilfe vonAndroidViewBinding
, wie im folgenden Snippet:
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:
- Möglicherweise verwenden Sie ein kürzlich geflashtes Gerät oder einen neuen Emulator. Versuchen Sie es nach Möglichkeit mit einem anderen echten Testgerät, das Sie häufig verwenden und auf dem Sie in Ihrem Google-Konto angemeldet sind. Die API sollte höchstens 30 sein, damit die Emojis mit der richtigen Version funktionieren.
- Das Test-Smartphone unterstützt keine herunterladbaren Schriftarten.
- Überprüfen Sie die richtige Version der Google Play-Dienste.
Empfehlungen für dich
- Hinweis: Der Linktext wird angezeigt, wenn JavaScript deaktiviert ist.
- Weitere Überlegungen
- Text in der Nachricht schreiben
- Scrollen