先贴一个链接http://blog.csdn.net/u011002668/article/details/50896586

自己根据需求去更改.

先不看代码,先说一下原理,把原理弄明白了,再看代码就很清晰。

在工程中,使用的就是系统的TextView,所以可以看出来显示表情并不是我自定义的功能,而是本身就支持的。只不过通常TextView在显示文本时,我们输入的都是普通的String或者Charsequence,要显示表情,就不能输入普通的String了,而是输入一个特殊的东西,叫SpannableString。
SpannableString,从名字也能看出来,它就是String字符串,只不过它在显示的时候,会把字符串中的一部分替换成一张图片,而当你调用editText.getText()方法时,返回的还是String字符串。所以它就是一段字符串和一张图片的对应。在显示的时候是图片,getText()取出时是String。

这个原理解释清楚后,示例图所展示的功能就不难了。

(1).由于需求的原因,此文只解析微信表情并显示上去,不发送表情

(2).微信表情获取的地址,微信安装路径D:\Program Files (x86)\91 Wireless\91Mobile V5\Dlls\WeChat\Resource\html\expression

(3).表情对应的String,最后面5个微信没有,无法测试

public static final String ee_1 = "/::)";
    public static final String ee_2 = "/::~";
    public static final String ee_3 = "/::B";
    public static final String ee_4 = "/::|";
    public static final String ee_5 = "/:8-)";
    public static final String ee_6 = "/::<";
    public static final String ee_7 = "/::$";
    public static final String ee_8 = "/::X";
    public static final String ee_9 = "/::Z";
    public static final String ee_10 = "/::'(";
    public static final String ee_11 = "/::-|";
    public static final String ee_12 = "/::@";
    public static final String ee_13 = "/::P";
    public static final String ee_14 = "/::D";
    public static final String ee_15 = "/::O";
    public static final String ee_16 = "/::(";
    public static final String ee_17 = "/::+";
    public static final String ee_18 = "/:--b";
    public static final String ee_19 = "/::Q";
    public static final String ee_20 = "/::T";
    public static final String ee_21 = "/:,@P";
    public static final String ee_22 = "/:,@-D";
    public static final String ee_23 = "/::d";
    public static final String ee_24 = "/:,@o";
    public static final String ee_25 = "/::g";
    public static final String ee_26 = "/:|-)";
    public static final String ee_27 = "/::!";
    public static final String ee_28 = "/::L";
    public static final String ee_29 = "/::>";
    public static final String ee_30 = "/::,@";
    public static final String ee_31 = "/:,@f";
    public static final String ee_32 = "/::-S";
    public static final String ee_33 = "/:?";
    public static final String ee_34 = "/:,@x";
    public static final String ee_35 = "/:,@@";
    public static final String ee_36 = "/::8";
    public static final String ee_37 = "/:,@!";
    public static final String ee_38 = "/:!!!";
    public static final String ee_39 = "/:xx";
    public static final String ee_40 = "/:bye";
    public static final String ee_41 = "/:wipe";
    public static final String ee_42 = "/:dig";
    public static final String ee_43 = "/:handclap";
    public static final String ee_44 = "/:&-(";
    public static final String ee_45 = "/:B-)";
    public static final String ee_46 = "/:<@";
    public static final String ee_47 = "/:@>";
    public static final String ee_48 = "/::-O";
    public static final String ee_49 = "/:>-|";
    public static final String ee_50 = "/:P-(";
    public static final String ee_51 = "/::'|";
    public static final String ee_52 = "/:X-)";
    public static final String ee_53 = "/::*";
    public static final String ee_54 = "/:@x";
    public static final String ee_55 = "/:8*";
    public static final String ee_56 = "/:pd";
    public static final String ee_57 = "/:<W>";
    public static final String ee_58 = "/:beer";
    public static final String ee_59 = "/:basketb";
    public static final String ee_60 = "/:oo";
    public static final String ee_61 = "/:coffee";
    public static final String ee_62 = "/:eat";
    public static final String ee_63 = "/:pig";
    public static final String ee_64 = "/:rose";
    public static final String ee_65 = "/:fade";
    public static final String ee_66 = "/:showlove";
    public static final String ee_67 = "/:heart";
    public static final String ee_68 = "/:break";
    public static final String ee_69 = "/:cake";
    public static final String ee_70 = "/:li";
    public static final String ee_71 = "/:bome";
    public static final String ee_72 = "/:kn";
    public static final String ee_73 = "/:footb";
    public static final String ee_74 = "/:ladybug";
    public static final String ee_75 = "/:shit";
    public static final String ee_76 = "/:moon";
    public static final String ee_77 = "/:sun";
    public static final String ee_78 = "/:gift";
    public static final String ee_79 = "/:hug";
    public static final String ee_80 = "/:strong";
    public static final String ee_81 = "/:weak";
    public static final String ee_82 = "/:share";
    public static final String ee_83 = "/:v";
    public static final String ee_84 = "/:@)";
    public static final String ee_85 = "/:jj";
    public static final String ee_86 = "/:@@";
    public static final String ee_87 = "/:bad";
    public static final String ee_88 = "/:lvu";
    public static final String ee_89 = "/:no";
    public static final String ee_90 = "/:ok";
    public static final String ee_91 = "/:love";
    public static final String ee_92 = "/:<L>";
    public static final String ee_93 = "/:jump";
    public static final String ee_94 = "/:shake";
    public static final String ee_95 = "/:<O>";
    public static final String ee_96 = "/:circle";
    public static final String ee_97 = "/:kotow";
    public static final String ee_98 = "/:turn";
    public static final String ee_99 = "/:skip";
    public static final String ee_100 = "/:oY";
    public static final String ee_101 = "/:#-0";
    public static final String ee_102 = "[街舞]";
    public static final String ee_103 = "/:kiss";
    public static final String ee_104 = "/:<&";
    public static final String ee_105 = "/:&>";

(4)解析的代码

public static SpannableString getExpressionString(Context context,
            String str, int textSize) {
        Log.d(TAG, str.length() + "str");
        SpannableString spannableString = new SpannableString(str);

for (int i = 0; i < EaseDefaultEmojiconDatas.emojis.length; i++) {
            String PATTEN_STR = EaseDefaultEmojiconDatas.emojis[i];

int indexOf = str.indexOf(PATTEN_STR);

if (indexOf != -1) {
                try {
                    dealExpression(context, str, spannableString, textSize,
                            PATTEN_STR, EaseDefaultEmojiconDatas.icons[i],
                            indexOf);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        return spannableString;
    }

String substring = "";

public static void dealExpression(Context context, String str,
            SpannableString spannableString, int textSize, String key,
            int icons, int start) throws Exception {
        Logger.d(TAG, spannableString + " == spannableString");

Drawable d = context.getResources().getDrawable(icons);
        d.setBounds(0, 0, textSize, textSize);
        ImageSpan imageSpan = new ImageSpan(d);
        int end = start + key.length();
        Logger.d(TAG, "start =" + start);
        spannableString.setSpan(imageSpan, start, end,
                Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

int indexOf = spannableString.toString().substring(end).indexOf(key);
        if (indexOf != -1) {
            Logger.d(TAG, indexOf + "indexOf");
            dealExpression(context, substring, spannableString, textSize, key,
                    icons, end + indexOf);
        }
    }

(5)核心代码

str用来创建SpannableString。
SpannableString ss = new SpannableString(str);
drawable用来创建ImageSpan。
ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BOTTOM);
那这两个是怎么关联的呢?就是下一行代码:
ss.setSpan(span, 0, str.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
用span来对应ss中从0到str.length()这段字符串。
最后调用显示
editText.getText().insert(cursor, ss);

(6)感谢第一篇文章的链接的博主Maybe_ren

Android 解析微信基础表情并显示相关推荐

  1. Android解析qq聊天记录表情

    偶然在一个需求中需要解析qq聊天记录表情,表情的格式是以/开始,比如:你好啊?/微笑,在网上找了半天,也没能找到一个比较合适的,所以准备自己实现一下,首先要将表情图片和表情字符对上号,我想了几种解决方 ...

  2. Android仿微信具有表情输入和拍照上传功能的键盘

    因公司业务要求,需要做一款类似微信聊天的页面,最主要的是表情输入和拍照.选图上传,因此仿照大神(https://github.com/dss886/Android-EmotionInputDetect ...

  3. Android仿微信首页下拉显示小程序列表

    花点时间重新熟悉一下AndroidUI方面的东西,把古董PullToRefreshView又撸了一遍,技术这种东西真是忘得快啊...在基础上新增一点东西,粗糙地实现了仿微信首页下拉显示小程序列表的样式 ...

  4. android微信下拉出现小程序,Android仿微信首页下拉显示小程序列表

    花点时间重新熟悉一下AndroidUI方面的东西,把古董PullToRefreshView又撸了一遍,技术这种东西真是忘得快啊...在基础上新增一点东西,粗糙地实现了仿微信首页下拉显示小程序列表的样式 ...

  5. android 仿微信聊天时间格式化显示

    仿微信聊天时间格式化显示. 在同一年的显示规则: 如果是当天显示格式为 HH:mm 例:14:45 如果是昨天,显示格式为 昨天 HH:mm 例:昨天 13:12 如果是在同一周 显示格式为 周一 H ...

  6. android 表情键盘切换,Android仿微信键盘切换效果

    Android 仿微信的键盘切换(录音,表情,文字,其他),IM通讯,类似朋友圈只要涉及到文字等相关的app都会要涉及到键盘的处理,今天就给大家分享一下Android 仿微信的键盘切换. 效果图如下: ...

  7. Android: 实现类似QQ、微信的表情输入键盘

    需求 最近在写北邮人论坛客户端时,有一个需求是实现像手机QQ.微信那样的表情输入键盘,效果图: 表情键盘本身并不难做,无非就是一个带SlidingTab的ViewPager,困扰我的地方在于,如何正确 ...

  8. Android 仿微信显示的聊天照片

    Android 仿微信显示的聊天照片 Android 仿微信显示的聊天照片,效果如下图所示: 这种显示的样式就是和微信的显示照片的样式是一样的,微信的实现我不知道是否和我一样,今天我来和大家介绍一下我 ...

  9. Android BLE与终端通信(二)——Android Bluetooth基础搜索蓝牙设备显示列表

    Android BLE与终端通信(二)--Android Bluetooth基础搜索蓝牙设备显示列表 摘要 第一篇算是个热身,这一片开始来写些硬菜了,这篇就是实际和蓝牙打交道了,所以要用到真机调试哟, ...

  10. Android仿微信聊天记录“图片及视频”默认最新图片从底部显示(时间排序升序)

    Android仿微信聊天记录"图片及视频"默认最新图片从底部显示(时间排序升序) 1.设置recycler的LinearLayoutManager LinearLayoutMana ...

最新文章

  1. 洛谷 P1598 垂直柱状图【字符串+模拟】
  2. linux有关Block的知识
  3. Yii:$app来源
  4. 设置mac的全局命令
  5. Spring 基于Java的Bean声明
  6. python 动态加载与静态加载_python中的元类、静态方法、类方法,动态添加方法...
  7. fastapi quickstart学习
  8. php抛出异常Exception和\Exception使用区别
  9. java中静态数组和动态数组的定义
  10. weka软件使用问题解决(一)
  11. 打开计算机管理iis,iis管理器怎么打开?Win7打开iis管理器的操作方法
  12. 双向TVS的符号及几个参数问题?
  13. python如何绘制曲线图_如何使用Python的Pandas库绘制折线图
  14. 【内网穿透笔记】FTP映射出现227 Entering Passive Mode错误命令原因及解决方法
  15. Linux学习简单教程和常用命令(小白学习法)
  16. 伦敦大学国王学院 计算机phd,伦敦大学国王学院招收博士(CSC资助博士或者NUS/HKU与KCL联培博士) - 公派出国 - 小木虫 - 学术 科研 互动社区...
  17. 公众平台模板消息所在行业_微信公众号模板消息群发第三方平台可以免费试用吗?...
  18. linux下syscall函数
  19. Js 代替eval的方法
  20. IDM的介绍、下载、注册激活使用教程详解 V6.38.2021

热门文章

  1. WTS_ERAL_年假生成规则
  2. 标题:书号验证 2004年起,国际ISBN中心出版了《13位国际标准书号指南》。 原有10位书号前加978作为商品分类标识;校验规则也改变。 校验位的加权算法与10位ISBN的算法不同,具体算法是
  3. 技术面试时该反问面试官什么问题?
  4. 计算机论文中的技术路线,毕业论文开题报告中技术路线怎么写
  5. 【VB+数控原理与系统】数控原理与系统课程设计刀具半径补偿直线-直线VB模拟软件实现
  6. 手机幻灯片html代码,html5手机幻灯片制作手指滑动触屏手机幻灯片代码
  7. 股票实时数据如何分析?
  8. sklearn神经网络/BP神经网络实现葡萄酒分类问题
  9. 蓝牙计算机操作与设置在哪里,win7电脑蓝牙在哪里打开_win7笔记本怎么开蓝牙
  10. MySQL创建数据库、数据表 | 零基础自学SQL课程系列Day3