之前我們說到瞭關於IQ聊天軟件的局域網聊天測試,今天給大夥說說氣泡的生成和編碼,這不是第三方的東西,是自己
開發的,需要整合佈局和容器來實現,其實當你看到源碼後,就會覺得很簡單,不信你跟著我往下看
首先說說我編程的思想,我們在一個Activity裡要動態生成一個消息列表,那ListView是必不可少的容器瞭,這是其一
其二,我們可以清楚的知道,“我”和好友的氣泡底色都是不同的,QQ的底色為:“我”為白底,好友“綠底”,不過這是以前老版本的,現在的新版本有自定義氣泡,種類很多,我們就不一一介紹瞭,所以我們需要定義兩個ListView Item 來填充ListView
其三,我們把佈局文件寫好後,剩下的就是加載消息列表瞭,今天就著重說說氣泡的開發吧,然後大致講講氣泡消息列表的加載
首先創建一個Activity,添加一個ListView,因為源碼都上傳瞭,這裡就不貼代碼瞭
分別定義 “我” 和 好友 的消息氣泡佈局文件:
此為好友的消息氣泡佈局,佈局源碼請到
源碼下載地址,附帶數據庫:https://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)); }