输入框发送表情(本地)

表情是一些特定的组合,如f000,f001等

/**
     * 显示内容
     * @param msg
     * @return
     */
    private SpannableString convertContent(String msg){
        String emoji;
        String regex = "f0[0-9]{2}|f10[0-6]";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(msg);
        SpannableString spannableString = new SpannableString(msg);
        int totalLen = 0;
        String leftString = msg.substring(0, msg.length());
        //找到一个匹配的,就截取
        while(matcher.find(0)){
            emoji = matcher.group();
            if(emoji.length() > 0){
                //找到表情在这段字符串的位置
                int len = leftString.indexOf(emoji)+emoji.length();
                //记录总长度
                totalLen = totalLen + len;
                Log.e("ZYL", "emoji:"+emoji+" ,len:"+len +", totalLen: "+totalLen);
                //转化为表情
                getSpannableString(spannableString, emoji,totalLen);
                //剩下字符串作为下一段字符串
                leftString = msg.substring(totalLen, msg.length());
                //重置matcher
                matcher.reset(leftString);
            }else{
                break;
            }
        }
        return spannableString;
    }


    private SpannableString getSpannableString(SpannableString spannableString,String emoji,int totalLen){
        try {
            Field field = R.drawable.class.getDeclaredField(emoji);
            int imageId = field.getInt(R.drawable.class);
            //根据图片的id得到bitmap
            Bitmap bmp = BitmapFactory.decodeResource(context.getResources(), imageId);
            //得到ImageSpan
            ImageSpan imageSpan = new ImageSpan(context,bmp);
            //使表情的text显示为表情图片
            spannableString.setSpan(imageSpan, totalLen-emoji.length(), totalLen,
                    SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE);
            return spannableString;
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        }
        return null;
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值