表情符号选择器

表情符号选择器是一种界面解决方案,具有现代风格的外观和风格、最新的表情符号,并且易于使用。用户可以浏览和选择表情符号及其变体,也可以从最近使用的表情符号中进行选择。

图 1. 表情符号选择器

借助此库,来自各种来源的应用都可以为用户提供包容且统一的表情符号体验,而无需开发者从头开始构建和维护自己的表情符号选择器。

功能

表情符号选择器具有以下功能。

最新表情符号

表情符号选择器会选择性地包含新发布的表情符号。表情符号选择器库可在多个 Android 版本和设备上兼容。

粘性变体

长按某个表情符号可显示变体菜单,例如不同的性别或肤色。您选择的变体将保存在表情符号选择器中,最后选择的变体将显示在主面板中。

借助此功能,用户只需点按一下即可发送自己喜欢的表情符号变体。

表情符号变体
图 2. 表情符号变体。

最近分享过的表情符号

最近分享过的表情符号
图 3. 最近用过的表情符号。

RecentEmojiProvider 负责提供最近用过类别中的表情符号。该库有一个默认的最近用过的表情符号提供程序,可满足最常见的应用场景:

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

如果此默认行为足够,则您无需使用 setRecentEmojiProvider()。

不过,您可能需要自定义提供程序行为。以下介绍了一些常见的情况:

  • 您希望为每个用户账号存储不同的所选表情符号。
  • 您想使用共享偏好设置以外的数据存储区。
  • 您希望按使用频率排序显示最近用过的表情符号。

然后,您可以实现 RecentEmojiProvider 接口并使用 setRecentEmojiProvider() 进行设置。

方向选择器

从 Emoji 15.1 开始,表情符号选择器支持双向表情符号。用户可以点按双向切换器,在左向和右向表情符号之间切换。

双向左侧表情符号

图 4. 朝左的双向表情符号。

双向右表情符号

图 5. 朝右的双向表情符号。

多人表情符号选择器

用户可以轻触并按住情侣表情符号,以显示多人表情符号选项。

按住情侣表情符号

图 6. 轻触并按住一对表情符号,即可显示多人表情符号选项。

点按左侧的表情符号人物

图 7. 选择左半边的人物表情符号。

点按右侧的表情符号人物

图 8. 选择右半边表情符号人物。

当用户选择情侣表情符号的左半部分或右半部分时,选择器会在右下角显示预览,如图 7 和图 8 所示。选择好表情符号情侣的两半后,用户可以选择预览来合成自定义表情符号情侣。

与 EmojiCompat 的兼容性

如果启用,表情符号选择器中会使用 EmojiCompat 实例来呈现尽可能多的表情符号。不过,表情符号选择器不需要 EmojiCompat。

前提条件

您的应用必须以 Android 5.0(API 级别 21)或更高版本为目标平台。

使用库

  1. 在应用的 build.gradle 文件中导入 androidx.emoji2:emojipicker:$version。

    dependencies {
        implementation "androidx.emoji2:emojipicker:$version"
    }
    
  2. 膨胀表情符号选择器视图,并视需要设置 emojiGridRows 和 emojiGridColumns。

    • emojiGridColumns 的默认数量为 9。
    • 行数是根据父视图高度和 emojiGridColumns 的值计算得出的。
    • 为 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)
    
  3. 使用 setOnEmojiPickedListener() 将所选表情符号附加到视图。 例如,如需附加到 EditText,请执行以下操作:

    emojiPickerView.setOnEmojiPickedListener {
        findViewById<EditText>(R.id.edit_text).append(it.emoji)
    }
    
  4. (可选)设置 RecentEmojiProvider,如需查看示例实现,请参阅示例应用。

  5. (可选)自定义样式。创建您自己的样式以替换常见主题属性,并将该样式应用于 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" />
    

示例应用

表情符号选择器示例应用演示了基本用例以及以下其他场景:

  • 重置 emojiGridRows 或 emojiGridColumns 时重新计算布局。
  • 按频率排序的已替换的最近用过的表情符号提供程序。
  • 其他样式自定义。