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

it2024-12-16  17

效果图:

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

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

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

public static Map<String, Integer> emojiList = new HashMap<String, Integer>(); emojiList.add(emojiList,"[微笑]", R.mipmap.emotion_weixiao_gif); 替换语句中对应的表情文字 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);

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

这样显示出来就是表情了 效果图:

最新回复(0)