安卓textview,editview等显示emoji表情和提交服务器后返回解析

这篇博客讲述了如何在安卓应用中处理和显示Emoji表情,包括从客户端显示Emoji、编辑框输入到发送到服务器的过程。关键在于理解String的编码解析,并在发送到服务器时使用替换符避免表情丢失。在接收服务器数据后,正确还原Emoji。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从早上搞到现在,才终于解决的,最后发现这个功能其实很容易实现,只是java的正则用的少Matcher和Pattern不够熟悉,才导致绕了很大的弯

有几点是需要明白的

一,String是根据编码解析从而得到字符的,我们的emoji是一张小小的位图的char

二,切入主题

1.安卓客服端显示emoji,这个不难,只要从位图解析图片后交给imageSpan然后替换掉SpannableString中的字符得到CharSequence

例子

输入到edittext中

ImageSpan imageSpan = new ImageSpan(UserTallGallery.this,BitmapFactory.decodeResource(getResources(),(AppData.getweiBoface())[position]));
SpannableString spannableString = new SpannableString("face");
spannableString.setSpan(imageSpan, 0, spannableString.length(),SpannableString.SPAN_MARK_MARK);
sendTextContainter.append(spannableString);
注:sendTextContainter是edittext


当我们点击发送时就要把edittext的东东放到panel了,如textview

这里需要注意的是我们的edittext是包含emoji表情的,所以在获取时不能tostring哦,不然就让String用字符编码解析了,结果肯定导致emoji表情丢失

例子

serTallGalleryBean.setSendContent(new SpannableString(sendTextContainter.getText()));
用Spannable来构造,其实直接塞给 CharSequence的引用就ok了,

2.接下来的步骤就重要了,我们要发含emoji的文字给服务器,说笑的,怎么可能直接发emoji呢,我们用一个替换符来替换,其实就是上面的

SpannableString spannableString = new SpannableString("face");
就是face了,当然我们要标志不同的emoji就用其他的,如

SpannableString spannableString = new SpannableString("[wbface("+position+")]");//方便格式化表情
完毕,数据可以保存到mysql了,

接下来就从mysql得到数据并还原成带表情的文字

		Pattern pattern = Pattern.compile("\\[wbface\\(\\d+\\)\\]");
		Matcher matcher = pattern.matcher(listTheme.get(position).getTheme_textcontent());
		SpannableString spannableString = new SpannableString(listTheme.get(position).getTheme_textcontent());//方便格式化表情
		while(matcher.find()){
			String str = matcher.group(0);
			int index = Integer.parseInt(str.substring(str.indexOf("(")+1, str.indexOf(")")));
			// 输入表情
			ImageSpan imageSpan = new ImageSpan(mcontext,BitmapFactory.decodeResource(mcontext.getResources(),(AppData.getweiBoface())[index]));
			spannableString.setSpan(imageSpan, matcher.start(0), matcher.end(0), SpannableString.SPAN_MARK_MARK);
		}
由于我们的表情只是一个一个的正则出来,所以
String str = matcher.group(0);
就是一个表情了,接下来用emoji图片替换就ok了





评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值