Emoji2

在当前设备和旧设备上显示表情符号。
最新更新 稳定版 发布候选版 Beta 版 Alpha 版
2025 年 6 月 4 日 1.5.0 - - 1.6.0-alpha01

声明依赖项

要添加对 Emoji2 的依赖项,您必须将 Google Maven 存储库添加到您的项目。阅读Google 的 Maven 存储库以获取更多信息。

在应用的或模块的 build.gradle 文件中添加所需工件的依赖项

Groovy

dependencies {
    def emoji2_version = "1.5.0"

    implementation "androidx.emoji2:emoji2:$emoji2_version"
    implementation "androidx.emoji2:emoji2-views:$emoji2_version"
    implementation "androidx.emoji2:emoji2-views-helper:$emoji2_version"
}

Kotlin

dependencies {
    val emoji2_version = "1.5.0"

    implementation("androidx.emoji2:emoji2:$emoji2_version")
    implementation("androidx.emoji2:emoji2-views:$emoji2_version")
    implementation("androidx.emoji2:emoji2-views-helper:$emoji2_version")
}

有关依赖项的更多信息,请参阅添加构建依赖项

反馈

您的反馈有助于改进 Jetpack。如果您发现新问题或有改进此库的建议,请告诉我们。在创建新问题之前,请查看此库中的现有问题。您可以通过点击星形按钮为您关注的现有问题投一票。

创建新问题

有关更多信息,请参阅问题跟踪器文档

Emoji2 表情符号选择器 1.0 版

1.5.0 版

2024 年 9 月 4 日

androidx.emoji2:emoji2-*:1.5.0 已发布。1.5.0 版包含这些提交

自 1.4.0 版以来的重要变更

  • 支持表情符号 15.1 和双向表情符号选择器界面。只需点击双向切换器,用户即可在表情符号的左向和右向版本之间切换。
  • 支持多肤色表情符号选择器。长按情侣表情符号会显示一个多人物表情符号选择器,用于零状态。当用户点击表情符号的左半部分时,右下角的表情符号预览会相应更新。当用户选择表情符号的两个半部分时,右下角的表情符号预览会显示整个表情符号,然后用户可以输入它。

1.0.0-alpha03 版

2023 年 3 月 8 日

androidx.emoji2:emoji2-emojipicker:1.0.0-alpha03 已发布。1.0.0-alpha03 版包含这些提交。

bug 修复

  • 移除了不必要的资源,并将库大小减少了约 0.3M。

1.0.0-alpha02 版

2023 年 2 月 22 日

androidx.emoji2:emoji2-emojipicker:1.0.0-alpha02 已发布。1.0.0-alpha02 版包含这些提交。

API 变更

  • 添加了新的 API,以便 Java 客户端能够提供最近使用的表情符号。(I39d10)

bug 修复

  • 更新了表情符号资源以支持表情符号 15.0 (Ib4eb3)
  • 从弹出窗口选择表情符号时,将所有相同的表情符号更新为新选择的表情符号(最近使用的表情符号行除外)。此外,点击时会播报表情符号。(I892c6)
  • 等待 emojicompat 加载完成后再显示 EmojiPickerView。(I29e03)

1.0.0-alpha01 版

2023 年 1 月 25 日

androidx.emoji2:emoji2-emojipicker:1.0.0-alpha01 已发布。1.0.0-alpha01 版包含这些提交。

新功能

  • 引入了表情符号选择器,可在 Android OS OEM 设备和应用上提供与最新表情符号一致的用户体验。它提供最新的表情符号支持和表情符号选择器界面,包括肤色变体和表情符号兼容性支持。

API 变更

  • 引入了 EmojiPickerView 类,该类在带有可点击水平标题的垂直可滚动视图中提供最新表情符号。
  • 表情符号选择器网格的列数可通过 XML 属性 emojiGridColumns 或函数 setEmojiGridColumns() 进行设置。
  • 表情符号选择器网格的行数可通过 XML 属性 emojiGridRows 或函数 setEmojiGridRows() 进行设置。
  • 表情符号选择监听器可通过 setOnEmojiPickedListener() 设置,当用户点击任何表情符号时,监听器都会收到通知。
  • 最近使用的表情符号提供器可通过 setRecentEmojiProvider() 提供。这是一个可选函数。如果未设置最近使用的表情符号提供器,库将使用默认的最近使用的表情符号提供器。默认行为定义如下:1) 所有选定的表情符号都将按应用级别保存在共享偏好设置中。2) 选择器最多显示 3 行选定的表情符号,已去重,并按时间倒序排列。
  • 引入了 EmojiViewItem 类,该类保存显示的表情符号及其变体。
  • 引入了 RecentEmojiProvider 接口,可实现该接口以提供最近使用的表情符号列表。recentEmojiProvider 负责提供“最近使用”类别中的表情符号。

1.6 版

1.6.0-alpha01 版

2025 年 6 月 4 日

androidx.emoji2:emoji2-*:1.6.0-alpha01 已发布。1.6.0-alpha01 版包含这些提交

新功能

  • 表情符号 16.0 数据更新 (Ifc878)
  • 在内容描述中添加“表情符号”后缀

bug 修复

  • 此库现在使用 JSpecify 空值注解,这些注解是类型用途。Kotlin 开发者应使用以下编译器参数来强制执行正确用法:-Xjspecify-annotations=strict-Xtype-enhancement-improvements-strict-mode (Id07e7, b/326456246)

1.5 版

1.5.0 版

2024 年 9 月 4 日

androidx.emoji2:emoji2-*:1.5.0 已发布。1.5.0 版包含这些提交

自 1.4.0 版以来的重要变更

  • 支持表情符号 15.1 和双向表情符号选择器界面。只需点击双向切换器,用户即可在表情符号的左向和右向版本之间切换。
  • 支持多肤色表情符号选择器。长按情侣表情符号会显示一个多人物表情符号选择器,用于零状态。当用户点击表情符号的左半部分时,右下角的表情符号预览会相应更新。当用户选择表情符号的两个半部分时,右下角的表情符号预览会显示整个表情符号,然后用户可以输入它。

1.5.0-rc01 版

2024 年 8 月 21 日

androidx.emoji2:emoji2-*:1.5.0-rc01 已发布。1.5.0-rc01 版包含这些提交

新功能

  • 支持表情符号 15.1 和双向表情符号选择器界面。只需点击双向切换器,用户即可在表情符号的左向和右向版本之间切换。
  • 支持多肤色表情符号选择器。长按情侣表情符号会显示一个多人物表情符号选择器,用于零状态。当用户点击表情符号的左半部分时,右下角的表情符号预览会相应更新。当用户选择表情符号的两个半部分时,预览将显示整个表情符号,然后用户可以输入它。

bug 修复

  • 移除了手动概述新平台 API 访问权限的功能,因为在使用 R8 和 AGP 7.3 或更高版本(例如 R8 3.3 版)时,以及在使用 AGP 8.1 或更高版本(例如 D8 8.1 版)进行所有构建时,这都会通过 API 建模自动发生。建议不使用 AGP 的客户端更新到 D8 8.1 版或更高版本。有关更多详细信息,请参阅本文。(If6b4c, b/345472586)
  • EmojiPickerView 的标签页选择和指示器更新滞后一次点击。(146b02, b/288261054)
  • EmojiPickerView 的标签页选择和指示器已损坏。(5e1f14, b/273883688)

1.5.0-beta01 版

2024 年 7 月 10 日

androidx.emoji2:emoji2-*:1.5.0-beta01 已发布。1.5.0-beta01 版包含这些提交

新功能

  • 支持表情符号 15.1 和双向表情符号选择界面。
  • 支持多肤色选择重新设计。

bug 修复

  • EmojiPickerView 的标签页选择和指示器更新滞后一次点击。(146b02, b/288261054)
  • EmojiPickerView 的标签页选择和指示器已损坏。(5e1f14, b/273883688)

1.5.0-alpha01 版

2023 年 12 月 13 日

androidx.emoji2:emoji2-*:1.5.0-alpha01 已发布。1.5.0-alpha01 版包含这些提交。

新功能

  • emoji2-bundled 包含更新的表情符号字体以支持表情符号 15.1。

API 变更

  • 添加执行器以控制 InitCallback 的回调线程。(I32b67)
  • BundledEmojiCompatConfig 现在接受一个执行器来控制加载线程。(I00e81)

1.4 版

1.4.0 版

2023 年 8 月 9 日

androidx.emoji2:emoji2-*:1.4.0 已发布。1.4.0 版包含这些提交。

自 1.3.0 版以来的重要变更

  • 引入了表情符号选择器库。有关更多详细信息,请查看开发者文档

1.4.0-rc01 版

2023 年 7 月 26 日

androidx.emoji2:emoji2-*:1.4.0-rc01 已发布。1.4.0-rc01 版包含这些提交。

API 变更

  • 引入 registerSource 列表 (Iae92f)
  • API 委员会反馈:将 TransitionManager.seekTo() 重命名为 createSeekController()。请调整之前关于将 TransitionManager.seekTo() 添加到 TransitionManager.createSeekController() 的评论。(Idbeb1)
  • 添加了 ExerciseRouteResult,它不是 DataNoDataConsentRequiredStates 的超类。添加了 ExerciseRoute 作为独立类,用于保存路线的位置数据。(I22eed)
  • 引入了 PagerLayoutInfo,其中包含 Pager 中测量过程后收集的信息。还引入了 PageInfo,它是 Pager 中单个测量页面的信息。(Iad003, b/283098900)

bug 修复

  • 我们已根据 Material3 设计更新了 ButtonIconButtonTextButton 的颜色。ButtonIconButtonTextButton 的语义角色现在可以使用 Modifier.semantics 进行覆盖。(Ib2495)
  • 修复了 EmojiPickerView 的标签页选择和指示器更新滞后一次点击的问题。(I4db04)
  • 显示表情符号选择器时出现 FileNotFoundException (I353e4)
  • 使用 EmojiPickerView 时捕获 WindowManager.BadTokenException (I0a144)

1.4.0-beta05 版

2023 年 6 月 7 日

androidx.emoji2:emoji2-*:1.4.0-beta05 已发布。1.4.0-beta05 版包含这些提交。

bug 修复

  • 修复了 1.3 版中引入的一个 bug,该 bug 会导致 MetricsAffectingSpans(例如 RelativeSizeSpan)应用两次。一次是在文本布局期间,另一次是在 EmojiSpan.draw 内部。结果是绘制尺寸不正确,如果任何文本大小参数被 span 更改,则可见。(b/283208650)

1.4.0-beta04 版

2023 年 5 月 24 日

androidx.emoji2:emoji2-*:1.4.0-beta04 已发布。1.4.0-beta04 版包含这些提交。

此版本修复了自 1.0 版以来一直存在的一个 bug,即具有非主处理器的视图在字体加载完成后尝试更新表情符号 span 时会抛出异常。没有解决方法,如果您受到此 bug 的影响,请升级到此版本或更高版本。

bug 修复

  • EmojiCompat 初始化回调现在将使用每个视图的处理程序,尊重不在主线程上的视图。(Iccbcf)

1.4.0-beta03 版

2023 年 5 月 10 日

androidx.emoji2:emoji2-*:1.4.0-beta03 已发布。1.4.0-beta03 版包含这些提交。

bug 修复

  • 修复了表情符号选择器嵌套弹出视图崩溃的问题。(0acc8e)
  • EmojiCompat getEmojiStart/getEmojiEnd 中抛出早期异常。(26177f)

1.4.0-beta02 版

2023 年 4 月 19 日

androidx.emoji2:emoji2-*:1.4.0-beta02 已发布。1.4.0-beta02 版包含这些提交。

bug 修复

  • 更新 lint 基线文件 (Iaa212)

1.4.0-beta01 版

2023 年 4 月 5 日

androidx.emoji2:emoji2-*:1.4.0-beta01 已发布。1.4.0-beta01 版包含这些提交。

新功能

androidx.emoji2:emoji2-emojipicker

表情符号选择器是一种 UI 解决方案,提供现代的外观和感觉、最新表情符号以及易用性。用户可以浏览和选择表情符号及其变体,或从最近使用的表情符号中进行选择。借助此库,不同 OEM 厂商的应用可以为用户提供包容且统一的表情符号体验,而开发者无需从头开始构建和维护自己的表情符号选择器。

最新表情符号

每年都会发布新的表情符号,我们将有选择地将其包含在表情符号选择器中。为确保向后兼容性,我们在内部执行精确的表情符号可渲染性检查,以消除“豆腐”(乱码)。这将确保该库在多个 Android 版本和设备上兼容。

粘性变体

长按表情符号将显示一个变体菜单,例如不同的性别或肤色。您选择的变体将保存在表情符号选择器中,并且上次选择的变体将用于主面板。通过此功能,用户只需轻点一下即可发送他们偏好的表情符号变体。

最近使用的表情符号

The RecentEmojiProvider 负责提供“最近使用”类别中的表情符号。该库有一个默认的最近使用的表情符号提供器,可满足最常见的用例

  • 所有选定的表情符号都将按应用级别保存在共享偏好设置中。
  • 选择器最多显示 3 行选定的表情符号,已去重,并按时间倒序排列。

如果此默认行为已足够,则您无需设置 setRecentEmojiProvider() 方法。

与 EmojiCompat 配合使用

如果应用有 EmojiCompat 实例,它将在表情符号选择器中使用,以渲染尽可能多的表情符号。如果 EmojiCompat 被禁用,表情符号选择器仍将正常工作。

如何使用此库

要使用此库,应用开发者应

  1. build.gradle 中导入 androidx.emoji2:emojipicker:$version

    dependencies {
      implementation "androidx.emoji2:emojipicker:$version"
    }
    
  2. 填充表情符号选择器视图,并可选地根据每个表情符号单元格的所需大小设置 emojiGridRowsemojiGridColumns

    • 您可以不设置它们,默认值为 9 个 emojiGridColumns,行数将根据父视图高度和 emojiGridColumns 计算
    • 您可以在 XML 中将 emojiGridRows 设置为浮点数,以指示向下滚动时有更多表情符号
     <androidx.emoji2.emojipicker.EmojiPickerView
      android:id="@+id/emoji_picker"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      app:emojiGridColumns="9" />
    

在代码中

    val emojiPickerView = EmojiPickerView(context).apply {
        emojiGridColumns = 15
        layoutParams = ViewGroup.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.MATCH_PARENT
        )
    }
    findViewById<ViewGroup>(R.id.emoji_picker_layout).addView(emojiPickerView)
  1. 假设您想将选定的表情符号附加到 EditText,请使用 setOnEmojiPickedListener()

      emojiPickerView.setOnEmojiPickedListener {
          findViewById<EditText>(R.id.edit_text).append(it.emoji)
      }
    
  2. 可选地设置 RecentEmojiProvider,有关示例实现,请参阅示例应用。

  3. 可选地自定义样式。创建您自己的样式以覆盖常见主题属性,并将样式应用于 EmojiPickerView。例如,覆盖 colorControlNormal 将更改类别图标颜色。

      <style name="CustomStyle" >
          <item name="colorControlNormal">#FFC0CB</item>
      </style>
      <androidx.emoji2.emojipicker.EmojiPickerView
          android:id="@+id/emoji_picker"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:theme="@style/CustomStyle"
          app:emojiGridColumns="9" />
    

有关示例实现,请参阅示例应用。

完整的 API 表面可在此处找到。

示例应用

示例应用展示了基本用例以及以下附加场景

  • 视图重新布局,因为 emojiGridRowsemojiGridColumns 已被重置。
  • 最近使用的表情符号提供器被覆盖为按频率排序。
  • 样式自定义。

API 变更

表情符号选择器库已更新,包含以下新 API

  • EmojiPickerView 类,它在带有可点击水平标题的垂直可滚动视图中提供最新表情符号。
  • 能够通过 XML 属性 emojiGridColumnsemojiGridRowssetEmojiGridColumns()setEmojiGridRows() 方法设置表情符号选择器网格中的列数和行数。
  • 能够通过 setOnEmojiPickedListener() 方法设置表情符号选择监听器。当用户点击任何表情符号时,监听器都会收到通知。
  • 能够通过 setRecentEmojiProvider() 方法提供最近使用的表情符号提供器。这是一个可选函数。如果未设置最近使用的表情符号提供器,库将使用默认的最近使用的表情符号提供器。默认行为定义如下
    • 所有选定的表情符号都将按应用级别保存在共享偏好设置中。
    • 选择器最多显示 3 行选定的表情符号,已去重,并按时间倒序排列。
  • EmojiViewItem 类,它保存显示的表情符号及其表情符号变体。
  • RecentEmojiProvider 接口,可实现该接口以提供最近使用的表情符号列表。recentEmojiProvider 负责提供“最近使用”类别中的表情符号。
  • RecentEmojiAsyncProvider 接口,可实现该接口以提供最近使用的表情符号列表。RecentEmojiAsyncProvider 负责提供“最近使用”类别中的表情符号。此接口等效于 RecentEmojiProvider,允许客户端覆盖 getRecentEmojiListAsync() 方法以提供最近使用的表情符号。
  • RecentEmojiProviderAdapter 类,它是 RecentEmojiAsyncProvider 的适配器,并实现了 RecentEmojiProvider

1.4.0-alpha01 版

2023 年 3 月 22 日

androidx.emoji2:emoji2-*:1.4.0-alpha01 已发布。1.4.0-alpha01 版包含这些提交。

bug 修复

  • 修复测试,禁用不稳定测试,并进行清理。

1.3 版

1.3.0 版

2023 年 3 月 22 日

androidx.emoji2:emoji2-*:1.3.0 已发布。1.3.0 版包含这些提交。

自 1.2.0 版以来的重要变更

  • 此版本允许 Compose Foundation 1.4.0 及更高版本启用 emoji2 集成。
  • 它还允许用自定义绘图代码替换 EmojiSpans 的功能,以及支持 Android 上定义的表情符号排除项。

1.3.0-rc01 版

2023 年 3 月 8 日

androidx.emoji2:emoji2-*:1.3.0-rc01 已发布。1.3.0-rc01 版包含这些提交。

新功能

  • 此版本旨在支持 emoji2 Compose 集成。

API 变更

  • 替换 span 以实现自定义绘图代码。
  • 查询系统排除项。

bug 修复

  • 并修复了背景 span 未在 EmojiSopans 后正确应用的 bug。

1.3.0-beta03 版

2023 年 2 月 23 日

androidx.emoji2:emoji2-bundled:1.3.0-beta03androidx.emoji2:emoji2-views:1.3.0-beta03androidx.emoji2:emoji2-views-helper:1.3.0-beta03 已发布。

2023 年 2 月 22 日

androidx.emoji2:emoji2:1.3.0-beta03 已发布。1.3.0-beta03 版包含这些提交。

新功能

  • 无变更。此版本旨在为 Compose 集成做准备。

1.3.0-beta02 版

2023 年 2 月 8 日

androidx.emoji2:emoji2-*:1.3.0-beta02 已发布。1.3.0-beta02 版包含这些提交。

新功能

  • 此版本旨在稳定以支持 Compose 集成。

1.3.0-beta01 版

2023 年 1 月 25 日

androidx.emoji2:emoji2-*:1.3.0-beta01 已发布。1.3.0-beta01 版包含这些提交。

新功能

  • 查询系统排除项。
  • 替换 span 以实现自定义绘图代码。
  • 并修复了背景 span 未在 EmojiSopans 后正确应用的 bug。
  • 此版本添加了支持 Compose 中 EmojiCompat 所需的 API。预计在不久的将来发布 Compose 对表情符号兼容性的支持。

1.3.0-alpha01 版

2023 年 1 月 11 日

androidx.emoji2:emoji2-*:1.3.0-alpha01 已发布。1.3.0-alpha01 版包含这些提交。

用于低级交互的新 API

  • 查询系统排除项
  • 替换 span 以实现自定义绘图代码
  • 并修复了背景 span 未在 EmojiSopans 后正确应用的 bug。
  • 此版本添加了支持 Compose 中 EmojiCompat 所需的 API。预计在不久的将来发布 Compose 对表情符号兼容性的支持。

API 变更

  • 添加了查询系统排除项到 TypefaceEmojiRasterizer 的功能。(I5653e)
  • 添加了新 API EmojiCompat.SpanFactory,用于用自定义绘图和尺寸代码替换默认的 EmojiSpan 行为。(Ib69d9)
  • EmojiCompat 添加到 Compose (I96f37, b/139326806)

bug 修复

1.2 版

1.2.0 版

2022 年 8 月 10 日

androidx.emoji2:emoji2-*:1.2.0 已发布。1.2.0 版包含这些提交。

自 1.1.0 版以来的重要变更

这是一个 bug 修复版本。自 1.1.0 版以来没有添加新功能或 API。

但是,使用 PrecomputedTextTextView.setText(char[]) 的应用应优先升级到此版本。

修复了以下 bug

  • Emoji2 将通过丢弃先前预计算的文本布局来向 PrecomputedText 添加表情符号。(I47d06, b/211231958)
  • 将 Android P 中的编辑器崩溃修复程序回溯到配置为使用 emoji2 的 EditText。(Ifd709, b/216891011)
  • 修复了 emoji2 加载字体并使用 TextView.setText(char[]) 时崩溃的问题。(Id511e, b/206859724)

1.2.0-rc01 版

2022 年 7 月 27 日

androidx.emoji2:emoji2-*:1.2.0-rc01 已发布。1.2.0-rc01 版包含这些提交。

  • 自上一个 Beta 版以来无变更。

1.2.0-beta01 版

2022 年 7 月 13 日

androidx.emoji2:emoji2-*:1.2.0-beta01 已发布。1.2.0-beta01 版包含这些提交。

新功能

  • 与上一版本无变更(此版本旨在支持 AppCompat 版本)。

1.2.0-alpha04 版

2022 年 4 月 20 日

androidx.emoji2:emoji2-*:1.2.0-alpha04 已发布。1.2.0-alpha04 版包含这些提交。

新功能

  • 此版本无变更。

1.2.0-alpha03 版

2022 年 4 月 6 日

androidx.emoji2:emoji2-*:1.2.0-alpha03 已发布。1.2.0-alpha03 版包含这些提交。

新功能

  • 与上一版本无变更(此版本旨在支持 appcompat 版本)。

1.2.0-alpha02 版

2022 年 3 月 23 日

androidx.emoji2:emoji2-*:1.2.0-alpha02 已发布。1.2.0-alpha02 版包含这些提交。

bug 修复

  • Emoji2 将通过丢弃先前预计算的文本布局来向 PrecomputedText 添加表情符号。(I47d06, b/211231958)
  • 将 Android P 中的编辑器崩溃修复程序回溯到配置为使用 emoji2 的 EditText。(Ifd709, b/216891011)
  • 修复了 emoji2 加载字体并使用 TextView.setText(char[]) 时崩溃的问题。(Id511e, b/206859724)

1.2.0-alpha01 版

2022 年 2 月 23 日

androidx.emoji2:emoji2-*:1.2.0-alpha01 已发布。1.2.0-alpha01 版包含这些提交。

自 1.1.0 版以来无变更。

1.1

1.1.0 版

2022 年 2 月 23 日

androidx.emoji2:emoji2-*:1.1.0 已发布。1.1.0 版包含这些提交。

自 1.0.0 版以来的重要变更

  • emoji2-bundled 包含表情符号 14 字体
  • 新的 getEmojiMatch API 返回准确信息,供键盘决定在存在落后于系统字体的 emojicompat 字体时,表情符号将如何显示
  • 修复了 NumberKeyListener 的 bug,该 bug 使得数字输入能够正确过滤字符。

1.1.0-rc01 版

2022 年 2 月 9 日

androidx.emoji2:emoji2-*:1.1.0-rc01 已发布。1.1.0-rc01 版包含这些提交。

新功能

与 Beta 版无变更。

与 emoji2 1.0.0 相比的新功能

  • emoji2-bundled 包含表情符号 14 字体
  • 新的 getEmojiMatch API 返回准确信息,供键盘决定在存在落后于系统字体的 emojicompat 字体时,表情符号将如何显示
  • 修复了 NumberKeyListener 的 bug,该 bug 使得数字输入能够正确过滤字符

1.1.0-beta01 版

2022 年 1 月 26 日

androidx.emoji2:emoji2-*:1.1.0-beta01 已发布。1.1.0-beta01 版包含这些提交。

bug 修复

  • androidx-emoji2 beta01 发布。与 alpha01 无变更 (Ic61d9)

1.1.0-alpha01 版

2021 年 12 月 15 日

androidx.emoji2:emoji2-*:1.1.0-alpha01 已发布。1.1.0-alpha01 版包含这些提交。

新功能

  • emoji2-bundled 包含表情符号 14 字体
  • 新的 getEmojiMatch API 返回准确信息,供键盘决定在存在落后于系统字体的 emojicompat 字体时,表情符号将如何显示
  • 修复了 NumberKeyListener 的 bug,该 bug 使得数字输入能够正确过滤字符

API 变更

  • 添加新 API getEmojiMatch,以便键盘更准确地查找 emojicompat 中的表情符号匹配行为。
  • 弃用 hasEmojiGlyph,因为当对照比平台表情符号字体旧的字体进行测试时,其布尔返回值不准确。替换为 getEmojiMatch。(Ie693d)

bug 修复

  • Emoji2 不会包装 NumberKeyListener 的实例,允许 TextView 配置区域设置。
  • Appcompat 不会包装传递给 setKeyListenerNumberKeyListener 实例,允许 TextViewNumberKeyListeners 上正确配置区域设置。(Ibf113, b/207119921)

1.0

1.0.1 版

2021 年 12 月 15 日

androidx.emoji2:emoji2-*:1.0.1 已发布。1.0.1 版包含这些提交。

bug 修复

  • Emoji2 不会包装 NumberKeyListener 的实例,允许 TextView 配置区域设置。
  • Appcompat 不会包装传递给 setKeyListenerNumberKeyListener 实例,允许 TextViewNumberKeyListeners 上正确配置区域设置。(Ibf113, b/207119921)

1.0.0 版

2021 年 11 月 17 日

androidx.emoji2:emoji2-*:1.0.0 已发布。1.0.0 版包含这些提交。

1.0.0 版的主要功能

androidx.emoji2 替换 androidx.emoji 并提供额外功能

  • 与 androidx.emoji 相比,APK 大小减小
  • 自动配置
  • 作为 appcompat 1.4 的依赖项添加

有关 androidx.emoji2 的更多信息,请参阅支持现代表情符号和我们的 Android 开发者峰会演讲在您的 Android 应用中显示所有表情符号

1.0.0-rc01 版

2021 年 10 月 27 日

androidx.emoji2:emoji2-*:1.0.0-rc01 已发布。1.0.0-rc01 版包含这些提交。

  • 自 beta02 版以来无变更。

Emoji2 1.0.0-beta01 版

2021 年 9 月 15 日

androidx.emoji2:emoji2-*:1.0.0-beta01 已发布。1.0.0-beta01 版包含这些提交。

API 变更

  • setLoadingExecutor 添加到 FontRequestEmojiCompatConfig,它取代了以前的 setHandler API。此 API 允许应用将 FontRequestEmojiCompatConfig 配置为使用任何后台执行器。

    此更改是 androidx.emoji:emoji 的破坏性更改,因此保留 setHandler 作为空操作(No-op)的已弃用 API,以帮助迁移。(I6cd48)

  • EmojiCompat 在 Android 11 上正确设置 EditorInfo.extras

    • 使用 IME 但未子类化 EditText 的自定义微件可以调用 EmojiCompat.updateEditorInfo 来通知 IME 它们支持 EmojiCompat 处理。(I1ea9b)

bug 修复

  • 修复了 DefaultEmojiCompatConfig 在 API 19 和 28 上无法正确查找表情符号字体提供器的问题。此修复解决了 emoji2 1.0.0-alpha01 中引入的一个 bug。(Ib33d8, b/197906329)

1.0.0-alpha03 版

2021 年 6 月 30 日

androidx.emoji2:emoji2-*:1.0.0-alpha03 已发布。1.0.0-alpha03 版包含这些提交。

新功能

此版本是 bug 修复和稳定版本。

  1. EmojiEditTextHelper 现在允许将 null 作为 KeyListener 传入。这使得平台行为允许将 null 应用于支持表情符号的 EditText 实现。
  2. 使用 EmojiCompatInitializer 时,初始启动延迟得到改进,以便在第一个 Activity 恢复后触发。这使得应用启动可以在无竞争的情况下进行,并避免为从未显示 UI 的应用启动加载字体。短时间延迟后,EmojiCompat 将创建一个线程来加载表情符号字体。
  • 为了实现延迟,androidx.emoji2:emoji2 添加了对 androidx.lifecycle:lifecycle-process 的新依赖项。对于已经包含生命周期(例如包含 appcompat 的应用)的应用来说,这几乎不会影响 APK 大小。

API 变更

  • 允许 AppCompatEditText 中的 KeyListener 为 null。这反转了 1.4.0-alpha01 中添加到 AppCompatEditText 的非 null 注解,并恢复了传递 null 时的先前行为。(I21482, b/189559345)

bug 修复

  • 将 EmojiCompatInitializer 更改为延迟字体加载,直到第一个 Activity.onResume 之后 500 毫秒。这允许活动无竞争地执行 Application.onCreateActivity.onCreate,同时仍确保在应用启动后不久加载表情符号字体。(I4bff7)

1.0.0-alpha02 版

2021 年 6 月 2 日

androidx.emoji2:emoji2:1.0.0-alpha02androidx.emoji2:emoji2-views:1.0.0-alpha02androidx.emoji2:emoji2-views-helper:1.0.0-alpha02 已发布。1.0.0-alpha02 版包含这些提交。

API 变更

  • emoji2-views-helper 中的包重命名为 androidx.emoji2.viewsintegration。这对 AppCompat 1.4.0-alpha01 是一个破坏性更改,应用必须确保 AppCompat 依赖项已更新以使用新的 emoji2 版本。(Ie8397)

1.0.0-alpha01 版

2021 年 5 月 18 日

androidx.emoji2:emoji2:1.0.0-alpha01androidx.emoji2:emoji2-views:1.0.0-alpha01androidx.emoji2:emoji2-views-helper:1.0.0-alpha01 已发布。1.0.0-alpha01 版包含这些提交。

此初始版本中的功能

建议所有应用集成 emojicompat 以支持从 API19 开始的现代表情符号。您的应用中的所有用户生成内容都包含 🎉。

EmojiCompat 已从 androidx.emoji 工件迁移到新的 androidx.emoji2,目前为 alpha01 版。新工件替换了旧版本。

emoji2 已作为依赖项添加到 AppCompat 中,从 AppCompat 1.4.0-alpha01 开始,并且默认情况下为 AppCompat 视图启用。

emoji2 工件引入了使用 androidx.startup 库的新自动配置。您不再需要编写任何 👨🏽‍💻 代码来显示 🐻‍❄️。

emoji2 相对于 emoji 的变更

  • 使用 androidx.startup 添加了新的自动配置 EmojiCompatInitializer
  • 添加了新的默认配置,它使用服务位置在 DefaultEmojiCompatConfiguration 中查找可下载字体提供器。
  • 类已从 androidx.emoji 包移至 androidx.emoji2
  • EmojiTextView 和相关视图拆分到单独的工件 emoji2-views 中。仅当您的应用不使用 appcompat 时才应使用此功能。
  • 将用于将 emojicompat 集成到自定义视图中的助手提取到单独的工件 emoji2-views-helper 中。
  • 添加了可为空性注解。
  • 即使未初始化 EmojiCompatemoji2-views-helper 中的助手现在也可以使用(以前它们会抛出异常)。

您应该添加哪些依赖项?

  • 使用 AppCompat 的应用应升级到 appcompat AppCompat 1.4.0-alpha01 或更高版本。
  • 不使用 AppCompat 但使用平台 TextView/EditText 的应用应使用 emoji2-views 中的 EmojiTextView 及相关类。

如何在自定义视图中支持

  • 使用 AppCompat 的应用应扩展 AppCompatTextViewAppCompatButton 等,而不是平台 TextView 等。
  • 不使用 AppCompat 的应用应添加 androidx.emoji2:emoji2-views-helper 依赖项,并使用助手与自定义 TextViewEditText 子类集成。

配置自动初始化

  • 应用可以通过将此内容添加到 manifest 来禁用自动初始化

     <provider
         android:name="androidx.startup.InitializationProvider"
         android:authorities="${applicationId}.androidx-startup"
         android:exported="false"
         tools:node="merge">
         <meta-data android:name="androidx.emoji2.text.EmojiCompatInitializer"
                   tools:node="remove" />
     </provider>
    
  • 这会禁用自动配置,然后您可以将自定义配置传递给 EmojiCompat.init。系统默认配置可以通过 DefaultEmojiCompatConfig.create(context) 获取,以便在传递给 EmojiCompat.init 之前进行进一步配置。