标准表情符号集 每年由 Unicode 更新,因为表情符号的使用在所有类型的应用程序中都在迅速增长。
如果您的应用显示互联网内容或提供文本输入,我们强烈建议您支持最新的表情符号字体。 否则,较新的表情符号可能会显示为一个小方框,称为豆腐 (☐) 或其他渲染错误的表情符号序列。
Android 版本 11(API 级别 30)及更低版本无法更新表情符号字体,因此在这些版本上显示表情符号的应用必须手动更新。
以下是现代表情符号的示例。
示例 | 版本 |
---|---|
🫠 🫱🏼🫲🏿 🫰🏽 | 14.0 (2021 年 9 月) |
😶🌫️ 🧔🏻♀️ 🧑🏿❤️🧑🏾 | 13.1 (2020 年 9 月) |
🥲 🥷🏿 🐻❄️ | 13.0 (2020 年 3 月) |
🧑🏻🦰 🧑🏿🦯 👩🏻🤝👩🏼 | 12.1 (2019 年 10 月) |
🦩 🦻🏿 👩🏼🤝👩🏻 | 12.0 (2019 年 2 月) |
2023 年 3 月 BOM (Compose UI 1.4) 带来了对 最新表情符号版本 的支持,包括向后兼容 API 21 及更早的旧版 Android 版本。
此支持不需要您对应用进行任何更改 - 如果您使用 Text
和 TextField
(Material 2 或 Material 3)或 BasicText
和 BasicTextField
,您将立即获得现代表情符号支持。
在您的应用中测试 最新表情符号 的最佳方法是在 API 30 或更低版本的真实设备上使用。
如果您使用的是自定义表情符号解决方案,或者需要出于任何其他原因在 Compose 中禁用默认表情符号解析,您可以使用 PlatformTextStyle(emojiSupportMatch)
Text( text = "Hello $EMOJI_TEXT", style = TextStyle( platformStyle = PlatformTextStyle( emojiSupportMatch = EmojiSupportMatch.None )/* ... */ ) )
互操作性
如果您的应用在同一个 Activity
中同时使用视图和 Compose,请确保您使用适当的 API 来正确配置表情符号。以下部分介绍了何时使用每个 API。
从 ComponentActivity
扩展
如果您的 Activity
从 Compose ComponentActivity
而不是 AppCompatActivity
扩展,请按照 在没有 AppCompat 的情况下支持表情符号 指令操作。
因为您没有从 AppCompatActivity
扩展,请将 Emoji2 库 添加到您的依赖项中,并在视图中使用 EmojiTextView
而不是 TextView
小部件,如下面的代码段所示
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 } } } }
然后,在您的 XML 文件中
<androidx.emoji2.widget.EmojiTextView android:id="@+id/emoji_text_view" android:layout_width="match_parent" android:layout_height="wrap_content" />
从 AppCompatActivity
扩展
如果您的 Activity
从 AppCompatActivity
扩展,您可以使用 ComposeView
来调用可组合函数。当您使用 Text 可组合函数时,表情符号会在所有 Android 版本中正确渲染。
如果您从 AppCompatActivity
扩展,请从 XML 中膨胀 TextView
以使表情符号正确渲染。
这适用于您膨胀 XML 时
- 在
ComposeView
之外,在Activity
中。请注意以下代码段中AppCompatActivity
和TextView
的用法
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 } } } }
- 在
ComposeView
内部,通过 视图绑定 使用AndroidViewBinding
,如下面的代码段所示
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 } } } } ) } }
要使用 AndroidView
在 ComposeView
内部膨胀文本,请使用 AppCompatTextView
来正确渲染表情符号
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 } ) } } } ) } }
有关详细信息,请参阅 互操作性 API 文档。
故障排除
如果您看到的是豆腐 (☐) 而不是表情符号,首先检查是否是您的特定测试设备的问题。有一些主要的事情您可以检查
- 您可能正在使用 最近刷新的设备或新的模拟器。如果可能,请尝试使用您经常使用的另一个真实测试设备,该设备已登录您的 Google 帐户。请记住,API 应为 30 或更低版本,以确保表情符号在正确的版本中正常工作。
- 测试手机 不支持可下载字体。
- 检查 正确的 Google Play 服务版本。
为您推荐
- 注意:当 JavaScript 关闭时,会显示链接文本
- 其他注意事项
- Compose 中的文本
- 滚动