Android 输入法表情实现
2015-08-21 14:34
381 查看
首先Android 设备包含表情符号,表情符号使用的是utf-16的编码,然后表情符号的Unicode 编码在:http://code.iamcal.com/php/emoji/,这里面有的表情符号占两个字节,有的占四个字节,两个字节的符号,可以直接转char再转CharSequence 输入提交就可以,但我的显示成黑白的表情符,可能是字库里这么设的。对于四个字节的符号,取值范围并不是全部,而是0x010000-0x10ffff;编码大于0xffff的utf-16的编码一半映射在0xd800-0xdbff,另一半映射在0xdc00-0xdfff;当读取的时候发现前面的取值范围在0xd800-0xdbff之间,则需要与后面的两个字节一起读取。
在获得表情符号的unicode编码是四字节的时候,获取前后的两段映射,具体算法如下:
public char[] getEM(int unicode){
char[] unicodearr = new char[2];
unicodearr[0] = (char) (Math.floor((unicode-0x10000)/0x400)+0xD800);
unicodearr[1] = (char) ((unicode-0x10000) % 0x400+0xDC00);
return unicodearr;
}
根据返回的两段映射转换为CharSequence chs = String.valueOf(ud);//ud为返回值,即返回的两段映射
chs就可以输入给编辑栏,就是该unicode的表情符号;
参考:http://www.ruanyifeng.com/blog/2014/12/unicode.html
在获得表情符号的unicode编码是四字节的时候,获取前后的两段映射,具体算法如下:
public char[] getEM(int unicode){
char[] unicodearr = new char[2];
unicodearr[0] = (char) (Math.floor((unicode-0x10000)/0x400)+0xD800);
unicodearr[1] = (char) ((unicode-0x10000) % 0x400+0xDC00);
return unicodearr;
}
根据返回的两段映射转换为CharSequence chs = String.valueOf(ud);//ud为返回值,即返回的两段映射
chs就可以输入给编辑栏,就是该unicode的表情符号;
参考:http://www.ruanyifeng.com/blog/2014/12/unicode.html
相关文章推荐
- android学习----overridePendingTransition
- Android Activity与远程Service的通信学习总结
- android软键盘把页面挤上去的解决方法
- android中是如何对包进行解析--解析ContentProvider
- android传递数据的几种方式之利用全局变量进行传递
- Android中验证输入是否为汉字及手机号,邮箱验证
- Android颜色代码
- Android系统时间
- Android SDK在线更新镜像服务器无需翻墙
- Android实现RichText(富文本)不同Text样式
- 如何让EditText不自动获取焦点
- Good blog for android
- Android学习系列之(一)环境搭建
- Android程序如何判断是不是第一次启动
- android 5.0 Material Design酷炫风格的开源项目集合
- Android C层如何加载.so库文件
- android 用fragment实现简单菜单点击功能
- android 获取通讯录并显示listview
- android 调用系统邮件 发送邮件到指定邮箱
- Android Studio Tips -- 布局预览