Emoji2

在当前设备和版本更低的设备上显示表情符号。
最近更新时间 稳定版 候选版 Beta 版 Alpha 版
2023 年 12 月 13 日 1.4.0 - - 1.5.0-alpha01

声明依赖项

如要添加 Emoji2 的依赖项,您必须将 Google Maven 制品库添加到项目中。如需了解详情,请参阅 Google 的 Maven 代码库

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

Groovy

dependencies {
    def emoji2_version = "1.4.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.4.0"

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

如需详细了解依赖项,请参阅添加 build 依赖项

反馈

您的反馈将帮助我们改进 Jetpack。如果您发现了新问题,或对此库有任何改进建议,请告诉我们。创建新问题前,请先查看此库中的现有问题。您可以点击星标按钮,为现有问题投票。

创建新问题

如需了解详情,请参阅问题跟踪器文档

Emoji2 Emojipicker 版本 1.0

版本 1.0.0-alpha03

2023 年 3 月 8 日

发布了 androidx.emoji2:emoji2-emojipicker:1.0.0-alpha03版本 1.0.0-alpha03 中包含这些提交内容

bug 修复

  • 移除了不必要的资源,并将库大小缩减了约 030 万。

版本 1.0.0-alpha02

2023 年 2 月 22 日

发布了 androidx.emoji2:emoji2-emojipicker:1.0.0-alpha02版本 1.0.0-alpha02 中包含这些提交内容

API 变更

  • 为 Java 客户端添加了新 API,以便能够提供最近用过的表情符号。(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 设备和应用中都能使用最新的表情符号。它不仅支持使用最新表情符号,还提供了表情符号选择器界面,包括不同肤色的表情符号和对表情符号 compat 的支持。

API 变更

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

版本 1.5

版本 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.createSeekController()”中添加 TransitionManager.seekTo() 的评论。(Idbeb1
  • 添加了 ExerciseRouteResult,它不是 DataNoDataConsentRequiredStates 的父类。将 ExerciseRoute 添加为独立类,用于存储路线的位置数据。(I22eed
  • 引入了 PagerLayoutInfo,其中包含在分页器中测量传递后收集的信息。还引入了 PageInfo,即 Pager 中单个测量网页的相关信息。(Iad003b/283098900

bug 修复

  • 我们根据 Material3 设计更新了 ButtonIconButtonTextButton 的颜色。现在可以使用 Modifier.semantics 替换 ButtonIconButtonTextButton 的语义角色。(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 中引入的会导致 MetricsAffectingSpans(如 RelativeSizeSpan)应用两次的 bug。一次是在文本布局过程中,另一次是在 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 修复

  • 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

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

最新的表情符号

每年都会发布新的表情符号,我们会有选择地将其加入到表情符号选择器中。为了确保向后兼容性,我们会在内部执行准确的表情符号可呈现性检查,以消除豆腐块。这将确保该库与多个 Android 版本和设备兼容。

粘性变体

长按某个表情符号会显示一个包含变体的菜单,例如不同的性别或肤色。您选择的变体将保存在表情符号选择器中,上次选择的变体将用在主面板中。借助此功能,用户只需点按一下,即可发送他们喜欢的表情符号变体。

最近用过的表情符号

RecentEmojiProvider 负责提供“最近用过”类别中的表情符号。该库具有默认的最近用过的表情符号提供程序,可满足最常见的用例:

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

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

使用 EmojiCompat

如果应用具有 EmojiCompat 实例,则会在表情符号选择器中使用该实例来呈现尽可能多的表情符号。如果停用 EmojiCompat,表情符号选择器仍然会正常运行。

如何使用库

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

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

    dependencies {
      implementation "androidx.emoji2:emojipicker:$version"
    }
    
  2. 膨胀表情符号选择器视图,然后根据每个表情符号单元格的所需大小视需要设置 emojiGridRowsemojiGridColumns

    • 您可以不设置这些属性,默认值为 9 个emojiGridColumns,行数将根据父视图高度和 emojiGridColumns 计算得出
    • 您可以将 emojiGridRows 设为浮点数,以表明在 XML 中向下滚动时有更多表情符号
     <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 Surface,请点击此处

示例应用

示例应用演示了基本用例以及下列其他场景:

  • 由于 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 修复

  • 修复了在 EmojiSopans 后面未正确应用背景 span 的 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。
  • 修复了在 EmojiSopans 后面未正确应用背景 span 的 bug。
  • 此版本添加了在 Compose 中支持 EmojiCompat 所必需的 API。预计在不久的将来,Compose 将支持表情符号 compat。

版本 1.3.0-alpha01

2023 年 1 月 11 日

发布了 androidx.emoji2:emoji2-*:1.3.0-alpha01版本 1.3.0-alpha01 中包含这些提交内容

用于低级别互动的新 API

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

API 变更

  • TypefaceEmojiRasterizer 添加了查询系统排除项的能力。(I5653e)
  • 添加了新 API EmojiCompat.SpanFactory,以用于将默认 EmojiSpan 行为替换为自定义绘图和大小调整代码。(Ib69d9)
  • 向 Compose 添加了 EmojiCompatI96f37b/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。(I47d06b/211231958
  • 将对编辑器崩溃问题的修复从 Android P 向后移植到配置为使用 emoji2 的 EditText。(Ifd709b/216891011
  • 修复了当 emoji2 加载字体并使用 TextView.setText(char[]) 时发生崩溃的问题。(Id511eb/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。(I47d06b/211231958
  • 将对编辑器崩溃问题的修复从 Android P 向后移植到配置为使用 emoji2 的 EditText。(Ifd709b/216891011
  • 修复了当 emoji2 加载字体并使用 TextView.setText(char[]) 时发生崩溃的问题。(Id511eb/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 包含 emoji 14 字体
  • 新的 getEmojiMatch API 会返回准确的信息,供键盘决定在出现推出时间早于系统字体的 emojicompat 字体时如何显示表情符号
  • NumberKeyListener 修复了 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 包含 emoji 14 字体
  • 新的 getEmojiMatch API 会返回准确的信息,供键盘决定在出现推出时间早于系统字体的 emojicompat 字体时如何显示表情符号
  • NumberKeyListener 修复了 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 包含 emoji 14 字体
  • 新的 getEmojiMatch API 会返回准确的信息,供键盘决定在出现推出时间早于系统字体的 emojicompat 字体时如何显示表情符号
  • NumberKeyListener 修复了 bug,使数字输入功能可以正确滤除字符

API 变更

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

bug 修复

  • Emoji2 不会封装 NumberKeyListener 的实例,以允许通过 TextView 配置语言区域。
  • Appcompat 不会封装传递给 setKeyListenerNumberKeyListener 实例,以允许 TextViewNumberKeyListeners 上正确配置语言区域。(Ibf113b/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 上正确配置语言区域。(Ibf113b/207119921

版本 1.0.0

2021 年 11 月 17 日

发布了 androidx.emoji2:emoji2-*:1.0.0版本 1.0.0 中包含这些提交内容。

1.0.0 的主要功能

androidx.emoji2 取代了 androidx.emoji,前者新增了以下功能:

  • 缩小了 APK 大小(与 androidx.emoji 相比)
  • 自动配置
  • 作为依赖项添加到了 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 变更

  • FontRequestEmojiCompatConfig 添加了 setLoadingExecutor,取代了以前的 API setHandler。使用此 API,应用可以将 FontRequestEmojiCompatConfig 配置为使用任何后台执行程序。

    这项更改是 androidx.emoji:emoji 中的一项破坏性更改,因此系统将 setHandler 保留为以空操作形式废弃的 API,以便于迁移。(I6cd48)

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

    • 如果自定义 widget 使用的是未将 EditText 子类化的 IME,那么这些 widget 可能会调用 EmojiCompat.updateEditorInfo 来通知 IME 它们支持 EmojiCompat 处理。(I1ea9b)

bug 修复

  • 修复了 DefaultEmojiCompatConfig,以便在 API 19 和 28 上正确查找表情符号字体提供程序。这修复了 emoji2 1.0.0-alpha01 中的 bug。(Ib33d8b/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 恢复后触发。这样即可在无争用情况下启动应用,并避免为从不显示界面的应用启动加载字体。在短暂延迟后,EmojiCompat 将创建一个线程来加载表情符号字体。
  • 添加了新的 androidx.lifecycle:lifecycle-process 依赖项(来自 androidx.emoji2:emoji2),以便实现延迟。对于已经包含生命周期的应用(例如具有 appcompat 的应用),这对 APK 大小的影响可以忽略不计。

API 变更

  • 允许在 AppCompatEditText 中使用 null KeyListener。这会逆转在 1.4.0-alpha01 中添加到 AppCompatEditText 的非 null 注解,并在传递 null 时恢复先前的行为。(I21482b/189559345

bug 修复

  • 将 EmojiCompatInitializer 更改为将字体加载延迟到第一个 Activity.onResume 之后的 500 毫秒。这样即可让 activity 在无争用情况下执行 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 阶段。这些新工件会取代之前的版本。

AppCompat 1.4.0-alpha01 开始,emoji2 会作为依赖项添加到 AppCompat 中,并默认为 AppCompat 视图启用。

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

emoji2 相对于 emoji 的变化

  • 使用 androidx.startup 添加了新的自动配置 EmojiCompatInitializer
  • 添加了新的默认配置,该配置会根据服务位置在 DefaultEmojiCompatConfiguration 中查找可下载的字体提供程序。
  • 将相应的类从 androidx.emoji 软件包移到了 androidx.emoji2
  • EmojiTextView 和相关视图拆分为单独的工件 emoji2-views。这应仅在您的应用不使用 AppCompat 时使用。
  • 提取用于将 EmojiCompat 集成到自定义视图中的帮助程序,并存放到单独的工件 emoji2-views-helper 中。
  • 添加了可为 null 性注解。
  • 现在,即使未初始化 EmojiCompat 也可以使用 emoji2-views-helper 中的帮助程序,而在之前则会抛出异常。

您应该添加什么依赖项?

  • 如果应用包含 AppCompat,则应升级到版本 AppCompat 1.4.0-alpha01 或更高版本。
  • 如果应用不含 AppCompat 并会使用平台中的 TextView/EditText,则应使用 EmojiTextView 和来自 emoji2-views 的相关类。

如何在自定义视图中支持 AppCompat

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

配置自动初始化

  • 应用可以通过将以下代码添加到清单中来停用自动初始化:

     <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