qq聊天界面七:表情的发送接收(用富文本现实)

来源:互联网 发布:linux虚拟机nat上网 编辑:程序博客网 时间:2024/06/04 19:43

先预览一下效果这里写图片描述
源码地址:https://github.com/heinika/SimpleChatUI

先定义一个包含反射的ImageGettter

/** * 用于解析富文本中的表情图片 */mImageGetter = new Html.ImageGetter() {@Overridepublic Drawable getDrawable(String source) {        Class clazz = R.mipmap.class;try {            Field field = clazz.getDeclaredField(source);int sourceId = field.getInt(field);            Drawable drawable = getResources().getDrawable(sourceId);            drawable.setBounds(0, 0, 50, 50);return drawable;        } catch (NoSuchFieldException e) {            e.printStackTrace();        } catch (IllegalAccessException e) {            e.printStackTrace();        }return null;    }};

将ImageGetter传递到adapter

messageAdapter = new MessageAdapter(messages, inflater, mImageGetter);/** * 点击表情时,将富文本添加到edittext中 */mGridViewFace.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {        Spanned spanned = Html.fromHtml("<img src='" + faces.get(position).getName() + "'/>", mImageGetter, null);mEditTextMsg.getText().insert(mEditTextMsg.getSelectionStart(), spanned);    }});

将富文本转换为String并传入moudel

messageSend.setMassageContent(filterHtml(Html.toHtml(mEditTextMsg.getText())));messages.add(messageSend);/*用正则表达式过滤掉无关的文本 */public String filterHtml(String str) {    str = str.replaceAll("<(?!br|img)[^>]+>", "").trim();    return str;}

在adapter用传入的imagegetter解析:图片

vhRight.mTextViewSend.setText(Html.fromHtml(message.getMassageContent(), mImageGetter, null));

完成任务!!!

0 0
原创粉丝点击