android 表情转化,android 表情emoil转化
sogo 输入法等输入表情,在程序中如何转化为可上传为服务器的字符串,以及从服务器取下字符串如何转化成表情显示
因为emoji是有表情分组的,所以你要优先考虑解析出来的也是分好组的。
HashMap> emoMap = new HashMap>();
我是这么来分组的。
解析xml,然后把2600这样的字符串转换成unicode。这个很关键,映射对应不上肯定也解析不出来。要注意的一点是有的emoji是两个unicode组成的 U+1F1F0 U+1F1F7 这样。。所以么。又多了一个环节。
HashMap, String> convertMap = new HashMap, String>();
再定义一个map来存unicode和string字符的映射。
解析emoji.xml文件,获取表情分组
public void readMap(Context mContext) {
if (convertMap == null || convertMap.size() == 0) {
convertMap = new HashMap, String>();
XmlPullParser xmlpull = null;
String fromAttr = null;
String key = null;
ArrayList emos = null;
try {
XmlPullParserFactory xppf = XmlPullParserFactory.newInstance();
xmlpull = xppf.newPullParser();
InputStream stream = mContext.getAssets().open("emoji.xml");
xmlpull.setInput(stream, "UTF-8");
int eventCode = xmlpull.getEventType();
while (eventCode != XmlPullParser.END_DOCUMENT) {
switch (eventCode) {
case XmlPullParser.START_DOCUMENT: {
break;
}
case XmlPullParser.START_TAG: {
if (xmlpull.getName().equals("key")) {
emos = new ArrayList();
key = xmlpull.nextText();
}
if (xmlpull.getName().equals("e")) {
fromAttr = xmlpull.nextText();
emos.add(fromAttr);
List fromCodePoints = new ArrayList();
if (fromAttr.length() > 6) {
String[] froms = fromAttr.split("\\_");
for (String part : froms) {
fromCodePoints.add(Integer.parseInt(part, 16));
}
} else {
fromCodePoints.add(Integer.parseInt(fromAttr, 16));
}
convertMap.put(fromCodePoints, fromAttr);
}
break;
}
case XmlPullParser.END_TAG: {
if (xmlpull.getName().equals("dict")) {
emoMap.put(key, emos);
}
break;
}
case XmlPullParser.END_DOCUMENT: {
Log.d("", "parse emoji complete");
break;
}
}
eventCode = xmlpull.next();
}
} catch (Exception e) {
Log.e(TAG, e.toString(), e);
}
}
}
输入内容解析为 字符串,即可上传至服务器
public String parseEmoji(String input) {
if (input == null || input.length() <= 0) {
return "";
}
StringBuilder result = new StringBuilder();
int[] codePoints = toCodePointArray(input);
List key = null;
for (int i = 0; i < codePoints.length; i++) {
key = new ArrayList();
if (i + 1 < codePoints.length) {
key.add(codePoints[i]);
key.add(codePoints[i + 1]);
if (convertMap.containsKey(key)) {
String value = convertMap.get(key);
if (value != null) {
result.append("[e]" + value + "[/e]");
}
i++;
continue;
}
}
key.clear();
key.add(codePoints[i]);
if (convertMap.containsKey(key)) {
String value = convertMap.get(key);
if (value != null) {
result.append("[e]" + value + "[/e]");
}
continue;
}
result.append(Character.toChars(codePoints[i]));
}
return result.toString();
}
服务器获取的表情字符串 需要转化成图片表情 ,根据表情id 找到对应图片
/**
* 对spanableString进行正则判断,如果符合要求,则以表情图片代替
*/
public static void dealExpression(Context context, SpannableString spannableString, Pattern patten, int start)
throws Exception {
Matcher matcher = patten.matcher(spannableString);
while (matcher.find()) {
String key = matcher.group();
Log.d("Key", key);
if (matcher.start() < start) {
continue;
}
Field field = R.drawable.class.getDeclaredField("emoji_"
+ key.substring(key.indexOf("]") + 1, key.lastIndexOf("[")));
int resId = Integer.parseInt(field.get(null).toString());
if (resId != 0) {
Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), resId);
ImageSpan imageSpan = new ImageSpan(bitmap);
int end = matcher.start() + key.length();
spannableString.setSpan(imageSpan, matcher.start(), end, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
if (end < spannableString.length()) {
dealExpression(context, spannableString, patten, end);
}
break;
}
}
}
android 表情转化,android 表情emoil转化相关推荐
- 【Android】显示Emoji表情字符
一.下载AndroidEmoji.ttf字体 地址1:Github Android Platform 地址2:AndroidEmoji.ttf.zip 二.使用 2.1 将字体拷贝到assets/fo ...
- android表情输入键盘,GitHub - UKfire/Emotion: 帮你的Android应用快速集成表情键盘
##Emotion 帮你快速集成Android表情键盘,让你的应用不止文字,让表情跳动起来 ##It looks Cool ##Usage Download ZIP,然后解压,将emoji包添加到自己 ...
- android 自定义表情包,android基于环信的聊天和表情自定义
环信sdk的导入 自定义聊天界面 此处只有静态图,请谅解. 自定义表情发送 自定义聊天界面 简单说下自定义的聊天界面,一个带有recyclerview和的xml文件,和对应的adapter即可.rec ...
- android高仿微信表情输入与键盘输入详解-解决跳闪与表情切换问题
最近公司在项目上要使用到表情与键盘的切换输入,自己实现了一个,还是存在些缺陷,比如说键盘与表情切换时出现跳闪问题,这个相当困扰我,不过所幸在Github(其中一个不错的开源项目是https://git ...
- android高仿微信表情输入与键盘输入(详细实现分析)
转载请注明出处(请尊重原创!谢谢~): http://blog.csdn.net/javazejian/article/details/52126391 出自[zejian的博客] 表情与键盘的切 ...
- IM界面高仿微信,android表情转ios表情,支持自定义表情,支持语音(实战界面)
前言: 2018年底由子公司来到现在的集团公司,从互联网公司变成了企业公司.在最近一个项目里,做的辛辛苦苦,功能又被砍了.没有理由,心力交瘁!本来是打算自己做IM的,现在被砍了.我就把本地功能贡献出来 ...
- Android IOS风格Emoji表情,简单实用
相信大家做项目的时候,特别是聊天相关的,一般都需要用到Emoji. 但是Emoji表情在安卓和IOS两个平台上,显示效果是不一样的,如下图: 言归正传,大家都知道,Emoji就是一组Unicode编码 ...
- Android UI【android 仿微信、QQ聊天,带表情,可翻页,带翻页拖动缓冲】
如题,这是公司项目的一个功能模块,先上个效果图: 其次大致说说原理: 1,首先判断输入的字符,是否包含表情的文字,比如 这个表情对应的文件名为 emoji_1.png,它对应的文字描述 : [可爱 ...
- Android 模仿手机QQ表情输入和表情预览框
闲来无事花了一点空暇时间写了一个模仿Android版手机QQ的表情输入框 效果图如下 实现步骤 一:布局 二:录入填充表情 三:监听表情的适配器的触摸监听显示出预览框 一 .布局 我是自己自定一个Ex ...
最新文章
- 移动端网站优化也不容小觑!
- Entity Framework中的Migrations
- XShell上无法通过rz上传空文件,通过新建文件来实现
- 手机技巧:是否应该一次性给手机充电到100%?看完你就明白了!
- Servlet 流程控制
- mysql 多值属性_数据库 名词解释:单值属性和多值属性
- 华强北二手手机卖不出去,闲鱼砸一亿现金帮扶
- ftp 上传档案到主机 OMVS
- 区块链100问41-60问
- C# 连接 SQL Server 数据库,出现异常:provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接...
- gerber文件怎么导贴片坐标_怎么用CAM350从Gerber中提取SMT元件贴片坐标-CAM350教程...
- 软件测试职业比赛,我院首届软件测试职业技能大赛圆满落幕
- 高版本linux安装gamit,Ubuntu14下Gamit安装(示例代码)
- 《东周列国志》第四十三回 智宁俞假鸩复卫 老烛武缒城说秦
- Android关于网络访问app应用开发相关的异常总结
- SQL存储过程使用介绍
- 数据库只读问题解决!!!MySQL server is running with the --read-only option
- Oracle中实现分页
- vue传值给子页面html,vue.js如何父传子?
- 推荐程序员面试秘籍!抖音Java后端123面开挂,太牛了!
热门文章
- 多条件求和--sum 和 sumifs 结合
- windows下 python3 安装channels报错
- jupyter notebook代码运行一直没有反应, 只显示*号
- jpa 动态sql拼接_jpa 如何优雅的实现动态sql
- linux服务器安装warp-ctc
- Android中启动一个服务,Android服务的两种启动方式
- java-php-python-ssm雷士灯具管理系统计算机毕业设计
- html设置距离页面上距离,html上下间距怎么调
- 自然语言处理——word2vec项目实战—— NLP理论基础
- 我的Android成长之路(9)----黑科技dataBinding(二)