【安卓】SpannableString替换文字为表情

效果图:

文字:[微笑][微笑][微笑][微笑][微笑]
替换后:
在这里插入图片描述
前提:已有表情图片,所以只能使用自己的表情图片
操作:

  1. 将表情图片放在mipmap文件夹下
  2. 将文字和表情图片一一对应

这里我是建立了一个类,定义了一个map

public static Map<String, Integer> emojiList = new HashMap<String, Integer>();
emojiList.add(emojiList,"[微笑]", R.mipmap.emotion_weixiao_gif);
  1. 替换语句中对应的表情文字
  public SpannableString disposeText(String text){   //text:需要替换的句子
  //使用SpannableString 
     SpannableString newText=new SpannableString(text);
  //匹配所有带有[]的词语
     Pattern pattern=Pattern.compile("\\[.+?\\]"); 
     Matcher matcher=pattern.matcher(text);
  //循环匹配结果
     while (matcher.find()){ 
       //如果emojiList含有,进行替换
       if(EmojiDate.emojiList.get(matcher.group())!=null){  
       //下面代码可以用更下面的那部分代码替换
         Bitmap bitmap= BitmapFactory.decodeResource(context.getResources(),EmojiDate.emojiList.get(matcher.group()));
        //需要传递进文字的大小,更好的确定表情的大小
        Bitmap scaleBitmap=Bitmap.createScaledBitmap(bitmap,(int)textSize*15/10,(int)textSize*15/10,true);
        ImageSpan span=new ImageSpan(context,scaleBitmap);
        newText.setSpan(span,matcher.start(),matcher.end(),Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
            }
        }
        return newText;
    }
//此段代码可替换上面的if中的代码
Drawable drawable=(Drawable)context.getResources().getDrawable(EmojiDate.emojiList.get(matcher.group()));
drawable.setBounds(0,0,20,20);
ImageSpan span=new ImageSpan(drawable,ImageSpan.ALIGN_BOTTOM);

但是上面的这个代码有一个问题,也许是我的图片的问题,下面的代码并不能调整表情的大小,这样会导致表情重叠起来

这样显示出来就是表情了
效果图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值