一,前言:
说实话,搞了这么久的Android,个人感觉,Android开发 其实只是一个无限重复的工作。 当然说这句话是有前提的,前提就是你还未从一个代码学习者转变为一个代码创造者。然而 很不辛,博主就是一个这样的开发者。这是博主在写这篇文章时的感悟。哎,说多了都是泪呀,
多说无益,还是谈下我们今天的项目:今天要写的博客其实是一个关于聊天界面输入表情的一篇博客。最近公司因为要用到聊天功能,博主稍微进行了一下研究。搞定公司项目后,自己写了一个关于表情的库。说实话网上有关的库简直时太多了。
二,献上效果图:
![这里写图片描述](https://img-blog.csdn.net/20171124181859503?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzIzMzA5Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
三,代码介绍:
说实话 网上的这种库简直时太多,本人也是在网上找了很多代码,最后在找到感觉还不错的几个库。改了改源码。相比原来的库更加简单优化。如果有童鞋对此有兴趣,可以继续往下看,否则请忽略。
初始化底部 inputboard 代码:
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ekBar = findViewById(R.id.ek_bar);initEmotionListener(); initMView(); }
private void initEmotionListener() {emoticonClickListener = new EmoticonClickListener() {@Overridepublic void onEmoticonClick(Object o, int actionType, boolean isDelBtn) {if (isDelBtn) {EmotionsPageManager.delClick(ekBar.getEtChat());} else {if (o == null) {return;}if (actionType == Constants.EMOTICON_CLICK_IMAGE) {if (o instanceof EmoticonBean) {Toast.makeText(EmotionsActivity.this, "图片:" + o.toString(),Toast.LENGTH_SHORT).show();}} else {String content = null;if (o instanceof EmoticonBean) {content = ((EmoticonBean) o).getContent();}if (TextUtils.isEmpty(content)) {return;}int index = ekBar.getEtChat().getSelectionStart();Editable editable = ekBar.getEtChat().getText();editable.insert(index, content);}}}};}
/*** 初始化 inputView:*/private void initMView() {ekBar.setAdapter(EmotionsPageManager.getCommonAdapter(this, emoticonClickListener));ekBar.addOnFuncKeyBoardListener(this);SimpleAppsGridView gridView = new SimpleAppsGridView(this);ekBar.addFuncView(gridView);ekBar.getEtChat().setOnSizeChangedListener(new EmoticonsEditText.OnSizeChangedListener() {@Overridepublic void onSizeChanged(int w, int h, int oldw, int oldh) {scrollToBottom();}});ekBar.getBtnSend().setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String mcgContent = ekBar.getEtChat().getText().toString();scrollToBottom();if (mcgContent.equals("")) {return;}Toast.makeText(getApplicationContext(), "发送消息", Toast.LENGTH_SHORT).show();}});ekBar.getVoiceOrText().setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {int i = v.getId();if (i == R.id.btn_voice_or_text) {ekBar.setVideoText();}}});}
表情图片以及表情符号,都是一些资源文件:博主对他们进行了压缩。减少了包的大小。
![这里写图片描述](https://img-blog.csdn.net/20171124181659368?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzIzMzA5Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
博主的表情包相对较多。当然如果对你无用你可以直接找到工具类EmotionsPageManager注释如下代码即可:
public static PageSetAdapter getCommonAdapter(Context context, EmoticonClickListener emoticonClickListener) {if (sCommonPageSetAdapter != null) {return sCommonPageSetAdapter;}PageSetAdapter pageSetAdapter = new PageSetAdapter();addEmotionPageSetEntity(pageSetAdapter, context, emoticonClickListener,"wxemotions", "wxemotions.zip","wx_emotions.xml");addEmotionPageSetEntity(pageSetAdapter, context, emoticonClickListener,"jiguangemotions", "jiguangemotions.zip", "jiguang_emotions.xml");addImagePageSetEntity(pageSetAdapter, context, emoticonClickListener,"rabbits", "rabbits.zip", "rabbits.xml");addImagePageSetEntity(pageSetAdapter, context, emoticonClickListener,"bigrabbits", "bigrabbits.zip", "big_rabbits.xml");addImagePageSetEntity(pageSetAdapter, context, emoticonClickListener,"chickenemotions", "chickenemoticons.zip", "chicken_emoticons.xml");addImagePageSetEntity(pageSetAdapter, context, emoticonClickListener,"bigbears","bigbears.zip","big_bear.xml");addImagePageSetEntity(pageSetAdapter, context, emoticonClickListener,"bears","bears.zip","bear.xml");addEmotionTextPageSetEntity(pageSetAdapter, context, emoticonClickListener);
return pageSetAdapter;}
当然如果对你有用希望动动你的小手fork 或者关注博主一下。下面奉上代码源地址:
https://github.com/zqHero/SessionChattingLibDemo
//下面 介绍网上的 几个开源库 博主 也是参考了下面的库:
// 当然如果对你有帮助 希望能fork一下喽:
XhsEmoticonsKeyboard:
https://github.com/w446108264/XhsEmoticonsKeyboard
![这里写图片描述](https://img-blog.csdn.net/20171124182202954?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzIzMzA5Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![这里写图片描述](https://img-blog.csdn.net/20171124182212942?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzIzMzA5Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
LQREmojiLibrary:
https://github.com/GitLqr/LQREmojiLibrary
![这里写图片描述](https://img-blog.csdn.net/20171124182512862?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzIzMzA5Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)