標籤:android style blog http io color ar os java
之前我們說到了關於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());//得到輸入的資料,並清空EditTextchatContent=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);}@Overridepublic void finish() { unregisterReceiver(br);super.finish();}//廣播接收器public class MyBroadcastReceiver extends BroadcastReceiver {@Overridepublic 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撰~~
Android Socket IQ聊天軟體 之 聊天氣泡編碼步驟講解