Der Standardsatz an Emojis wird jährlich von Unicode aktualisiert, da die Verwendung von Emojis für alle Arten von Apps rasant zunimmt.
Wenn in Ihrer App Internetinhalte angezeigt werden oder Texteingaben möglich sind, empfehlen wir dringend, die neuesten Emoji-Schriftarten zu unterstützen. Andernfalls werden spätere Emojis möglicherweise als kleines Quadrat (☐), das als Tofu bezeichnet wird, oder als andere falsch gerenderte Emoji-Sequenzen angezeigt.
Bei Android-Versionen 11 (API-Level 30) und niedriger kann die Emoji-Schriftart nicht aktualisiert werden. Apps, in denen Emojis auf diesen Versionen angezeigt werden, 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) |
BOM 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 hinunter zu 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 automatisch Unterstützung für moderne Emojis.
Am besten testen Sie die neuesten Emojis in Ihrer App auf einem echten Gerät 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 richtig zu konfigurieren. In den folgenden Abschnitten wird beschrieben, wann Sie die einzelnen APIs verwenden sollten.
Verlängerung ab ComponentActivity
Wenn Ihre Activity von Compose ComponentActivity anstelle von AppCompatActivity abgeleitet 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 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" />
Verlängerung ab AppCompatActivity
Wenn Ihre Activity von AppCompatActivity abgeleitet wird, können Sie ComposeView verwenden, um zusammensetzbare Funktionen aufzurufen. Emojis werden in allen Android-Versionen korrekt gerendert, wenn Sie Text-Composables verwenden.
Wenn Sie AppCompatActivity erweitern, müssen Sie TextView aus XML aufblähen, damit Emojis richtig gerendert werden.
Dies gilt, wenn Sie das XML aufblähen:
- außerhalb von
ComposeViewin 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 } } } }
- innerhalb von
ComposeViewüber view binding 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 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 (☐) sehen, prüfen Sie zuerst, ob das Problem an Ihrem Testgerät liegt. Das kann hauptsächlich aus folgenden Gründen passieren:
- 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-Version sollte 30 oder niedriger sein, damit Emojis in den richtigen Versionen funktionieren.
- Das Testgerät unterstützt keine herunterladbaren Schriftarten.
- Prüfen Sie, ob die richtige Version der Google Play-Dienste installiert ist.
Empfehlungen für dich
- Hinweis: Linktext wird angezeigt, wenn JavaScript deaktiviert ist.
- Weitere Überlegungen
- Text in Compose
- Scrollen