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撰~~

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。