Android Socket IQ聊天軟件 之 聊天氣泡編碼步驟講解

之前我們說到瞭關於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));
	}

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。