您的位置:首页 > 移动开发 > Android开发

在Android项目中支持emoji

2015-12-30 23:36 423 查看
首先我要吐槽下坑爹的csdn文章发布系统,之前一直用网易博客,除了代码显示不是很强大,当然文本编辑也跟csdn一样烂,但是人家支持word发博啊,方便多了。


最近为了要做一个项目,需要显示emoji表情,而且考虑到要与IOS端同步(两端的emoji编码格式必须相同)。
结合网上找到的结果,分析有以下3种方法
1.直接使用一个可以支持emoji的字库。最简单,但是字库不好找,而且字库效果是黑白的,而且比较占用内存。
2.获得系统root权限,更改系统字库,前面的变种。这样的话可以全局支持。不像第一种,对每一个想使用emoji的控件要分别设置。但是缺点有一是不是所有手机都root了,二同1,三是用户会很反感吧,一个破程序要改我系统字库.
3.直接写一个表情管理类,使用emoji图片。这个代码量过多,而且,emoji表情库也不容易找全。
针对以上3种方法,我找到了农民伯伯的一篇博客。可惜我没有试成功,试了将近一下午,大坑,后来改用DroidSansFallback.ttf字体实现。没成功我估计他用的emoji编码模式是softbank(应该是软银自家自己先用的吧)的,最近的编码是unified(Unicode),/article/4602862.html。Anyhow,十分感谢他提供的这种思路。
其次,这位同学的是/article/4922289.html第三种办法,但是图片库过少,我没试,应该可以,仅作参考。新浪微博的我反编译看了下是这种方式写的。Whatsapp用的也是这种方式。
见图



这里有一个比较全的emoji库http://www.emoji-cheat-sheet.com/。用第三种方法做出来的同学可共享下代码。
我自己用网上一个论坛下了个字库,叫做DroidSansFallback.ttf。测试可以。
为了测试,输入的时候我用了Go输入法国际版+emoji插件来测试。搜狗输入法(后来经过测试,目前最新版的+4.0以上系统可以)的表情emoji表情编码不是Unicode的,我用了好久不行,这是个坑。
最终做出来的效果如下:



核心代码就5-6行。

[java] view
plaincopy





try{

Typeface typefaceDroidSansFallback=Typeface.createFromAsset(getResources().getAssets(), "fonts/DroidSansFallback.ttf");

mEditText.setTypeface(typefaceDroidSansFallback);

mContentTextView.setTypeface(typefaceDroidSansFallback);

}catch(Exception ex){

Log.i("EmojiTest->MainActivity", "Catch Exception!");

}

代码跟字库都放在这里
代码是免费下载的,希望能帮到大家。

其他参考文档:

1.http://blog.csdn.net/qdkfriend/article/details/7576524

2.http://www.easyapns.com/iphone-emoji-alerts

3.http://opensource.apple.com/source/ICU/ICU-461.13/icuSources/data/translit/Any_SoftbankSMS.txt

4.http://code.iamcal.com/php/emoji/

5.http://punchdrunker.github.io/iOSEmoji/table_html/flower.html

6.emoji图片及编码表http://download.csdn.net/detail/qdkfriend/4309051
7.http://www.emoji-cheat-sheet.com/
8.http://bbs.csdn.net/topics/390055415

UPDATE
update 1 2014-4-4
1.最近发现github有个开源的emoji字库,大家可以直接用https://github.com/rockerhieu/emojicon 支持输入输出,是使用上面说的方法3实现的,基本可以覆盖常用的操作。
2.有些同学说代码不行是因为你输入的不是emoji字符,使用android4.0以上系统加最新版的搜狗输入法(5.4以及以上)或者Go输入法国际版+emoji插件可以输入。
3.最终效果我做出来了,可以支持947个emoji字符,包括新版的以及旧版的编码,因为公司保密协议,不能共享,望理解。
4.上面的贴出来的代码是使用字体实现的,发现效果不好,但是是一种解决办法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: