相信大家做项目的时候,特别是聊天相关的,一般都需要用到Emoji。
但是Emoji表情在安卓和IOS两个平台上,显示效果是不一样的,如下图:
言归正传,大家都知道,Emoji就是一组Unicode编码与一组表情描述之间的一一对应。而图片的实现是由各个系统或者软件针对统一的表情描述来各自实现的,他们都遵循统一的Unicode编码规范。也就是说Unicode编码其所对应的表情描述是统一的,是所有人都要共同遵守的一套标准或者规范,而具体的表情图片则可能因平台的不同而产生差异,比如Android和IOS。简单理解为一个Unicode对应一个表情图片,比如0x1F601对应的表情是
(咧着嘴笑),当然他的Unicode码不变,该系统上这个表情图片是什么就对应显示该表情图片。
有需要的可以去上面的链接查询对应的编码!!!
本章就以Apple风格的Emoji来演示,效果图如下:
如何使用:
dependencies {
implementation 'com.github.OneGreenHand:Emoji:v1.2.4'
}
1、初始化
在Application中进行初始化
EmojiManager.init(this)
2、在布局中应用
<com.green.hand.library.widget.EmojiBoard
android:layout_width="match_parent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:deleteIcon="@mipmap/ic_launcher"//可选
app:emojiIndicator="@mipmap/ic_launcher"//可选
app:emojiIndicatorHover="@mipmap/ic_launcher"//可选
/>
*可选,如果不用此控件,需自行监听实现,具体参考EmoniEdittext。
<com.green.hand.library.widget.EmojiEdittext
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
//兼容emoji显示的textview
<com.green.hand.library.widget.EmojiTextview
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
3、在页面中使用
实现表情框Item单击事件(emojiBoard为EmojiBoard控件,textEditor为Edittext控件)
emojiBoard.setItemClickListener(new EmojiBoard.OnEmojiItemClickListener() {//表情框点击事件
@Override
public void onClick(String code) {
if (code.equals("/DEL")) {//点击了删除图标
textEditor.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL));
} else {//插入表情
textEditor.getText().insert(textEditor.getSelectionStart(), code);
}
}
});
4、部分方法
EmojiBoard ---> showBoard() //显示隐藏表情框
EmoniEdittext ---> isEnable(view) //用于未输入文字时,其他按钮不可点击
EmojiTextview ---> setUseSystemDefault(boolean) //是否使用系统默认表情
属性说明
deleteIcon:删除icon
emojiIndicator:底部未选中icon
emojiIndicatorHover:底部选中icon
补充说明
如果仍然出现显示为☐或者乱码情况,可尝试使用官方的 EmojiCompat 支持库或使用emojicon三方库
版本历史
- v1.2.4
升级到android x
- v1.2.3
GridView变更为Recycleview、资源优化、升级版本
- v1.2.2
新增、替换表情、去除ButterKnife依赖
- v1.2.1
新增、去除重复表情
修复部分手机无法显示问题
加入兼容Emoji显示的控件
Github直达链接
欢迎Start或提issues!