1.建立一个表情类
class Expr{
private String buf;//字符串
private String exIcon;//表情图片名称
private String desc;//描述
.....//set get方法
}
2.聊天处理页面,需要一个EditText 一个GridView 和 一个Button
EditText etChat;//发送的消息内容
GridView gridView;//放置所有表情的容器
Button btnSend;//发送按钮
public static final StringEXP_START = "<img src=\"";
public static final StringEXP_END = "\">";
//此方法是用来给编辑框里添加表情
gridView.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
Expr ex = (Expr) expAdapter.getItem(position);//此次略去表情的Adapter
ImageGetter imageGetter = new ImageGetter() {
public Drawable getDrawable(String source) {
Drawable d = ImageUtil.getDrawable(source);//这个方法是用图片名称来查找图片,
int height = etChat.getHeight();
float scale = (float) height / d.getIntrinsicHeight();
int width = (int) (d.getIntrinsicWidth() * scale);
d.setBounds(0, 0, width, height);
return d;
}
};
etChat.append(Html.fromHtml(EXP_START + ex.getExIcon() + EXP_END, imageGetter, null));
}
});
3.发送处理
Editable ed = etChatContent.getText();
String html = Html.toHtml(ed);
String msgContent = VerifyUtil.replaceImg(html);//这个是个正则表达式,用来去除html中含有的<p></p>等字符.
msgContent = chatSendMatch(msgContent);//方法在下面,替换所有的
//可以将msgContent发送出去了.
// 将图片名称转化为目标串
public static String chatSendMatch(String src) {
if (src == null || src.length() <= (EXP_START.length() + EXP_END.length()))
return src;
List<Expr> exs = getAllExpress();//所有表情的集合
for (int i = 0; i < exs.size(); i++) {
Expr ex = exs.get(i);
String temp = EXP_START + ex.getIconName() + EXP_END;
if (src.contains(temp)) {
src = src.replace(temp, ex.getBuf());
}
}
return src;
}