Der Standardsatz an Emojis wird jährlich von Unicode aktualisiert, da die Nutzung von Emojis in allen Arten von Apps rasant zunimmt.
Wenn deine 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 Quadrat (☐) angezeigt, das auch als Tofu bezeichnet wird, oder als andere falsch gerenderte Emoji-Sequenzen.
Unter Android 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.
Hier sind einige 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) unterstützt die neueste Emoji-Version, einschließlich Abwärtskompatibilität mit älteren Android-Versionen bis API 21.
Diese Unterstützung erfordert keine Änderungen an deiner App. Wenn du Text und TextField (Material 2 oder Material 3) oder BasicText und BasicTextField verwendest, erhältst du sofort Unterstützung für moderne Emojis.
Die beste Möglichkeit, die neuesten Emojis in deiner 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 in Ihrer App sowohl Ansichten als auch Compose in derselben Activity verwendet werden, müssen Sie die entsprechenden APIs verwenden, um Emojis richtig zu konfigurieren. In den folgenden Abschnitten wird beschrieben, wann die einzelnen APIs verwendet werden sollten.
Ab ComponentActivity verlängern
Wenn Ihre Activity von Compose ComponentActivity statt von AppCompatActivity abgeleitet ist, 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 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" />
Ab AppCompatActivity verlängern
Wenn Ihre Activity von AppCompatActivity abgeleitet ist, können Sie ComposeView verwenden, um zusammensetzbare Funktionen aufzurufen. Emojis werden in allen Android-Versionen korrekt dargestellt, wenn Sie Text-Kompositionen verwenden.
Wenn du von AppCompatActivity erweiterst, musst du TextView aus XML-Code einfügen, damit Emojis korrekt gerendert werden.
Dies gilt, wenn Sie die XML-Datei aufblähen:
- außerhalb von
ComposeView, in derActivity. Beachten Sie die Verwendung vonAppCompatActivityundTextViewim 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 } } } }
- in
ComposeViewüber die Ansichtsbindung mitAndroidViewBinding, 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 einfügen möchten, verwenden Sie AppCompatTextView, um Emojis richtig darzustellen:
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 du Tofu (☐) anstelle des Emojis siehst, prüfe zuerst, ob das Problem an deinem Testgerät liegt. Es gibt einige wichtige Punkte, die Sie prü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. Denken Sie daran, dass die API-Version 30 oder niedriger sein muss, damit Emojis in den richtigen Versionen funktionieren.
- Das Test-Smartphone unterstützt keine herunterladbaren Schriftarten.
- Prüfen Sie, ob die richtige Version der Google Play-Dienste installiert ist.
Empfehlungen für Sie
- Hinweis: Der Linktext wird angezeigt, wenn JavaScript deaktiviert ist.
- Weitere Überlegungen
- Text in Compose
- Scrollen