首先我说一下我的大致经过,因为公司是做时尚类的所有表情的做法直接模仿了小红书和好,没有做全部的表情代码,只做了80个常用表情,表情图片自己去准备。因为设计刚好离职的缘故,所以自己偷懒,直接解压了nice的apk包,然后采用了nice的表情图片(64 * 64px)。然后有两种做法,一种是edittext编辑的时候插入对应的表情图片,用到imagespan,然后自己跟服务端匹配了对应的表情标识(各种转码...超级麻烦)。然后做完之后发现图片不论我怎么剪裁,都不能完美的匹配字体大小,具体情况就是输入表情时输入框文字高度会出现下移,具体原因没有找到,后来我用搜狗输入法的表情输入之后,发现它为什么能完全的匹配,而且服务端不需要任何匹配,它也可以正常的显示,于是我想找到它是怎么做的,然后各种查找如何调用输入法的emoji表情,结果无奈并没有找到结果。于是我想是不是系统自己做了某些处理,因为android系统本身也有有表情的,那么输入法也是调用的系统的表情,是在我就先找到了unicode码大全 表情符号表 ,找到你需要的unicode码,然后用集合封装起来,与你的emoji表情对应。我是直接建了一个emoji工具类,用来封装emoji对象。
public class EmojiUtil {
private static ArrayList <Emoji> mEmojiList;
//获取emoji表情集合
public static ArrayList <Emoji> getEmojiList(){
if(mEmojiList == null){
mEmojiList = generateEmojis();
}}
return mEmojiList;
}}
private static ArrayList <Emoji> generateEmojis(){
ArrayList <Emoji> list = new ArrayList <>();
for(int i = 0; i <EmojiResArray.length; i ++){
Emoji emoji = new Emoji();
emoji.setEmojiResId(EmojiResArray [i]);
emoji.setEmojiUnicode(EmojiUnicodeArray [i]);
list.add(emoji);
}}
返回列表;
}}
public static final int [] EmojiUnicodeArray = {
0x1f604,
0x1f603,
0x1f60a,
0x1f609,
0x1f60d,
0x1f618,
0x1f61a,
0x1f61c,
0x1f61d,
0x1f633,
0x1f601,
0x1f614,
0x1f60c,
0x1f612,
0x1f61e,
0x1f623,
0x1f622,
0x1f602,
0x1f62d,
0x1f61a,
// -------------------------------
0x1f625,
0x1f630,
0x1f613,
0x1f628,
0x1f631,
0x1f620,
0x1f621,
0x1f616,
0x1f637,
0x1f632,
0x1f47f,
0x1f60f,
0x1f466,
0x1f467,
0x1f468,
0x1f469,
0x1f31f,
0x1f444,
0x1f44d,
0x1f44e,
// -------------------------------
0x1f44c,
0x1f44a,
0x270a,
0x270c,
0x1f446,
0x1f447,
0x1f449,
0x1f448,
0x1f64f,
0x1f44f,
0x1f4aa,
0x1f457,
0x1f380,
0x2764,
0x1f494,
0x1f48e,
0x1f436,
0x1f431,
0x1f339,
0x1f33b,
// -------------------------------
0x1f341,
0x1f343,
0x1f319,
0x2600,
0x2601,
0x26a1,
0x2614,
0x1f47b,
0x1f385,
0x1f381,
0x1f4f1,
0x1f50d,
0x1f4a3,
0x26bd,
0x2615,
0x1f37a,
0x1f382,
0x1f3e0,
0x1f697,
0x1f559,
};
public static final int [] EmojiResArray = {
R.drawable.emoji_0x1f604,
R.drawable.emoji_0x1f603,
R.drawable.emoji_0x1f60a,
R.drawable.emoji_0x1f609,
R.drawable.emoji_0x1f60d,
R.drawable.emoji_0x1f618,
R.drawable.emoji_0x1f61a,
R.drawable.emoji_0x1f61c,
R.drawable.emoji_0x1f61d,
R.drawable.emoji_0x1f633,
R.drawable.emoji_0x1f601,
R.drawable.emoji_0x1f614,
R.drawable.emoji_0x1f60c,
R.drawable.emoji_0x1f612,
R.drawable.emoji_0x1f61e,
R.drawable.emoji_0x1f623,
R.