android Emoji表情输入,输入表情和输入法表情输入相同

本文介绍了在Android应用中实现Emoji表情输入的方法,包括从nice APK中获取表情图片并使用ImageSpan插入编辑文本,以及遇到的问题——表情图片与字体大小不匹配导致的文字高度下移。对比搜狗输入法的完美匹配,作者探讨了系统自带表情的可能性,并提供了通过Unicode码实现表情的方法,分享了一种建立Emoji工具类的解决方案。
摘要由CSDN通过智能技术生成

      首先我说一下我的大致经过,因为公司是做时尚类的所有表情的做法直接模仿了小红书和好,没有做全部的表情代码,只做了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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值