表情符号选择器

表情符号选择器是一个UI解决方案,它提供现代外观和感觉、最新的表情符号和易用性。用户可以浏览和选择表情符号及其变体,或从他们最近使用过的表情符号中进行选择。

图1. 表情符号选择器

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

功能

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

最新的表情符号

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

粘性变体

长按表情符号以显示变体菜单,例如不同的性别或肤色。您选择的变体将保存在表情符号选择器中,并且在主面板中使用上次选择的变体。

借助此功能,用户只需点击一下即可发送他们首选的表情符号变体。

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

最近的表情符号

recent emoji
图3. 最近的表情符号。

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

  • 所有选定的表情符号都按应用保存在共享首选项中。
  • 选择器最多显示三行选定的表情符号(已去重),按时间逆序排列。

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

但是,您可能需要自定义提供程序行为。以下是一些常见场景

  • 您想为每个用户帐户存储不同的选定表情符号。
  • 您想使用共享首选项以外的数据存储。
  • 您想按频率显示最近的表情符号。

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

方向选择器

Emoji 15.1开始,表情符号选择器支持双向表情符号。用户可以点击双向切换器在表情符号的左右方向版本之间切换。

bidirectional left emoji

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

bidirectional right emoji

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

多人表情符号选择器

用户可以触摸并按住表情符号对以显示多人表情符号选择。

touch and hold emoji couple

图6. 触摸并按住表情符号对以显示多人表情符号选择。

tap left emoji person

图7. 选择左侧表情符号人物。

tap right emoji person

图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. 加载表情符号选择器视图,并可选地设置emojiGridRowsemojiGridColumns

    • 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" />
    

示例应用

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

  • 重置emojiGridRowsemojiGridColumns时重新计算布局。
  • 一个按频率排序的重写最近表情符号提供程序。
  • 其他样式自定义。