Android Socket IQ聊天软件 之 聊天气泡编码步骤讲解
之前我们说到了关于IQ聊天软件的局域网聊天测试,今天给大伙说说气泡的生成和编码,这不是第三方的东西,是自己
开发的,需要整合布局和容器来实现,其实当你看到源码后,就会觉得很简单,不信你跟着我往下看
首先说说我编程的思想,我们在一个Activity里要动态生成一个消息列表,那ListView是必不可少的容器了,这是其一
其二,我们可以清楚的知道,“我”和好友的气泡底色都是不同的,QQ的底色为:“我”为白底,好友“绿底”,不过这是以前老版本的,现在的新版本有自定义气泡,种类很多,我们就不一一介绍了,所以我们需要定义两个ListView Item 来填充ListView
其三,我们把布局文件写好后,剩下的就是加载消息列表了,今天就着重说说气泡的开发吧,然后大致讲讲气泡消息列表的加载
首先创建一个Activity,添加一个ListView,因为源码都上传了,这里就不贴代码了
分别定义 “我” 和 好友 的消息气泡布局文件:
此为好友的消息气泡布局,布局源码请到
源码下载地址,附带数据库:http://download.csdn.net/detail/jspping/8067509
主布局是线性布局,在主布局下添加了一个头像Imageview、一个发送时间Textview,嵌套了一个线性布局,给线性布局添加了一个背景图片,也就是绿底色气泡,在线性布局里添加了一个好友消息 TextView,显示好友发送的消息
我的气泡:
气泡实时动态加载核心代码:
et_input=(EditText) findViewById(R.id.et_input); findViewById(R.id.ib_send).setOnClickListener(new OnClickListener(){ public void onClick(View v) { myAccount=MoreActivity.me.getAccount(); ObjectOutputStream oos; try { oos = new ObjectOutputStream //通过account找到该线程,从而得到OutputStream (ServerManager.getClientConServerThread(myAccount).getSocket().getOutputStream()); //得到输入的数据,并清空EditText chatContent=et_input.getText().toString(); et_input.setText(""); //发送消息 IQMSG m=new IQMSG(); m.setType(IQMSGResult.COM_MES); m.setSender(myAccount); m.setSenderNick(MoreActivity.me.getNick()); m.setSenderAvatar(MoreActivity.me.getAvatar()); m.setReceiver(chatAccount); m.setContent(chatContent); m.setSendTime(IQTime.geTimeNoS()); oos.writeObject(m); //更新聊天内容 updateChatView(new MessageEntity( MoreActivity.me.getAvatar(), chatContent, IQTime.geTime(), false)); } catch (IOException e) { e.printStackTrace(); } } }); //注册广播 IntentFilter myIntentFilter = new IntentFilter(); myIntentFilter.addAction("engineer.jsp.iq.Client.mes"); br=new MyBroadcastReceiver(); registerReceiver(br, myIntentFilter); ManageActivity.addActiviy("MessageActivity", this); } @Override public void finish() { unregisterReceiver(br); super.finish(); } //广播接收器 public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String[] mes = intent.getStringArrayExtra("message"); Log.i("MessageActivity", "数据:"+mes); //更新聊天内容 updateChatView(new MessageEntity( Integer.parseInt(mes[2]), mes[3], mes[4], true)); } } public void updateChatView(MessageEntity chatEntity){ chatEntityList.add(chatEntity); chatListView=(ListView) findViewById(R.id.lv_chat); chatListView.setAdapter(new MessageAdapter(this,chatEntityList)); }
有不懂得,请在本博客留言,第一时间看到,第一时间解答!,谢谢,Engineer-Jsp撰~~
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。