之前我们说到了关于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撰~~