应用背景
不知道大家是否开发过类似朋友圈,论坛之类的功能。通常在这个过程中我们要有发表情的需求。LZ当时遇到了这个需求,所以完成功能后,就将发表情这个功能封装了一下。使用非常简单,只需要三两行代码,你就能在你的项目中实现发表情的功能啦。
效果图展示
实现步骤
1.将以下类与资源文件依次导入到你自己的项目中
2.在某输入页面中的xml中添加布局文件
比如我这个效果图就是一个Activity。那我就在Activity的根部局当中添加如下代码
<include
android:id="@+id/chat_face_container"
layout="@layout/chat_face_container"
android:visibility="gone" />
这里应该注意xml页面的搭建逻辑,chat_face_container应该在一个LinearLayout的最下面,整个LinearLayout应该是附着在屏幕底部。具体请参考demo
3.在代码中的配置
非常非常的简单,只需要一行代码即可
//param1:你加入当前页面中的布局,param2:你的输入框,param3:context
ChatFaceView chatFaceView = new ChatFaceView(chat_face_container, edit_input_text, this);
假如ios发来一条带有表情的消息,如何将字符串消息转换为带有表情的字符串?
调用如下方法即可
SpannableStringBuilder ssbC = FaceUtils.getInstance(context).toSpanText(
edit_input_text.getText().toString());
tvshow2.setText(ssbC);
另外还有一些常用api
/*比如:
为输入框添加点击事件,点击输入框让chatview消失*/
edit_input_text.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
chatFaceView.closeChatView();
}
});
/*比如:
为表情按钮添加点击事件,点击让chatview消失或显示*/
btn_chat_emoji.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
chatFaceView.openOrCloseChatView();
}
});
核心要点
1.发送表情实则是发送的表情对应的String编码,这个编码在本案例中就在asset文件下
2.点击表情后,表情图片如何显示在了EditText中?而不是以原本String格式显示?
这是通该方法实现
/**
*
* @param png 文件名,不含路径
* @return
*/
private SpannableStringBuilder getFace(String png) {
SpannableStringBuilder sb = new SpannableStringBuilder();
try {
// String tempText = "[" + png + "]";
String tempText =FaceUtils.getInstance(mContext).GetFaceMap(0).get(png);
sb.append(tempText);
sb.setSpan(
new ImageSpan(mContext, BitmapFactory
.decodeStream(mContext.getAssets().open("face/default/" + png))), sb.length()
// .decodeStream(mContext.getAssets().open(png))), sb.length()
- tempText.length(), sb.length(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
} catch (Exception e) {
e.printStackTrace();
}
return sb;
}
[源码下载地址:http://download.csdn.net/detail/qq_23347751/9650522]
[转载请注明出处:http://blog.csdn.net/qq_23347751/article/details/52785938 ]