Android編程實(shí)現(xiàn)泡泡聊天界面實(shí)例詳解(附源碼)
本文實(shí)例講述了Android編程實(shí)現(xiàn)泡泡聊天界面的方法。分享給大家供大家參考,具體如下:
昨天寫了個(gè)界面,實(shí)現(xiàn)了Android泡泡聊天界面。運(yùn)行結(jié)果如下,點(diǎn)擊發(fā)送按鈕,屏幕就顯示Text的內(nèi)容。

我也是在網(wǎng)上的一份源碼的基礎(chǔ)上更改的,整個(gè)泡泡界面的實(shí)現(xiàn)要點(diǎn):
(1)主界面其實(shí)就是一個(gè)List View
(2)文字顯示界面其實(shí)就使用了android:background="@drawable/incoming"這個(gè)東西。背景圖片的格式是xxx.9.png,專門用來縮放的,不然顯示效果非常差。
(3)自定義了一個(gè)adapter,當(dāng)然是繼承android.widget.BaseAdapter,重寫了getView的方法。
整個(gè)工程分布如下:

主activity: ChatActivity如下:
package com.tencent;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.Calendar;
public class ChatActivity extends Activity {
private static final String TAG = ChatActivity.class.getSimpleName();;
private ListView talkView;
private Button messageButton;
private EditText messageText;
// private ChatMsgViewAdapter myAdapter;
private ArrayList<ChatMsgEntity> list = new ArrayList<ChatMsgEntity>();
public void onCreate(Bundle savedInstanceState) {
Log.v(TAG, "onCreate >>>>>>");
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
talkView = (ListView) findViewById(R.id.list);
messageButton = (Button) findViewById(R.id.MessageButton);
messageText = (EditText) findViewById(R.id.MessageText);
OnClickListener messageButtonListener = new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Log.v(TAG, "onclick >>>>>>>>");
String name = getName();
String date = getDate();
String msgText = getText();
int RId = R.layout.list_say_he_item;
ChatMsgEntity newMessage = new ChatMsgEntity(name, date, msgText, RId);
list.add(newMessage);
// list.add(d0);
talkView.setAdapter(new ChatMsgViewAdapter(ChatActivity.this, list));
messageText.setText("");
// myAdapter.notifyDataSetChanged();
}
};
messageButton.setOnClickListener(messageButtonListener);
}
// shuold be redefine in the future
private String getName() {
return getResources().getString(R.string.myDisplayName);
}
// shuold be redefine in the future
private String getDate() {
Calendar c = Calendar.getInstance();
String date = String.valueOf(c.get(Calendar.YEAR)) + "-"
+ String.valueOf(c.get(Calendar.MONTH)) + "-" + c.get(c.get(Calendar.DAY_OF_MONTH));
return date;
}
// shuold be redefine in the future
private String getText() {
return messageText.getText().toString();
}
public void onDestroy() {
Log.v(TAG, "onDestroy>>>>>>");
// list = null;
super.onDestroy();
}
}
顯示消息體的定義
package com.tencent;
public class ChatMsgEntity {
private static final String TAG = ChatMsgEntity.class.getSimpleName();
private String name;
private String date;
private String text;
private int layoutID;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public int getLayoutID() {
return layoutID;
}
public void setLayoutID(int layoutID) {
this.layoutID = layoutID;
}
public ChatMsgEntity() {
}
public ChatMsgEntity(String name, String date, String text, int layoutID) {
super();
this.name = name;
this.date = date;
this.text = text;
this.layoutID = layoutID;
}
}
ChatMsgViewAdapter定義如下:
package com.tencent;
import android.content.Context;
import android.database.DataSetObserver;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;
import java.util.ArrayList;
public class ChatMsgViewAdapter extends BaseAdapter {
private static final String TAG = ChatMsgViewAdapter.class.getSimpleName();
private ArrayList<ChatMsgEntity> coll;
private Context ctx;
public ChatMsgViewAdapter(Context context, ArrayList<ChatMsgEntity> coll) {
ctx = context;
this.coll = coll;
}
public boolean areAllItemsEnabled() {
return false;
}
public boolean isEnabled(int arg0) {
return false;
}
public int getCount() {
return coll.size();
}
public Object getItem(int position) {
return coll.get(position);
}
public long getItemId(int position) {
return position;
}
public int getItemViewType(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
Log.v(TAG, "getView>>>>>>>");
ChatMsgEntity entity = coll.get(position);
int itemLayout = entity.getLayoutID();
LinearLayout layout = new LinearLayout(ctx);
LayoutInflater vi = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
vi.inflate(itemLayout, layout, true);
TextView tvName = (TextView) layout.findViewById(R.id.messagedetail_row_name);
tvName.setText(entity.getName());
TextView tvDate = (TextView) layout.findViewById(R.id.messagedetail_row_date);
tvDate.setText(entity.getDate());
TextView tvText = (TextView) layout.findViewById(R.id.messagedetail_row_text);
tvText.setText(entity.getText());
return layout;
}
public int getViewTypeCount() {
return coll.size();
}
public boolean hasStableIds() {
return false;
}
public boolean isEmpty() {
return false;
}
public void registerDataSetObserver(DataSetObserver observer) {
}
public void unregisterDataSetObserver(DataSetObserver observer) {
}
}
布局文件看得我比較痛苦,這個(gè)布局文件不好搞啊,呵呵
完整實(shí)例代碼代碼點(diǎn)擊此處本站下載。
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
相關(guān)文章
保持Android Service在手機(jī)休眠后繼續(xù)運(yùn)行的方法
下面小編就為大家分享一篇保持Android Service在手機(jī)休眠后繼續(xù)運(yùn)行的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-03-03
Kotlin中實(shí)現(xiàn)多線程數(shù)據(jù)刷新的完整方案
這篇文章主要介紹了Kotlin中實(shí)現(xiàn)多線程數(shù)據(jù)刷新的完整方案,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2025-04-04
EasyValidate優(yōu)雅地校驗(yàn)提交數(shù)據(jù)完整性
這篇文章主要介紹了EasyValidate優(yōu)雅地校驗(yàn)提交數(shù)據(jù)完整性,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-12-12
Android關(guān)于Button背景或樣式失效問題解決方法
大家好,本篇文章主要講的是Android關(guān)于Button背景或樣式失效問題解決方法,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下2022-01-01
Android studio listview實(shí)現(xiàn)列表數(shù)據(jù)顯示 數(shù)據(jù)循環(huán)顯示效果
這篇文章主要介紹了Android studio listview實(shí)現(xiàn)列表數(shù)據(jù)顯示 數(shù)據(jù)循環(huán)顯示功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04
Android動(dòng)態(tài)表格的實(shí)現(xiàn)代碼(內(nèi)容、樣式可擴(kuò)縮)
這篇文章主要介紹了Android動(dòng)態(tài)表格的實(shí)現(xiàn)代碼(內(nèi)容、樣式可擴(kuò)縮),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09
詳解Android開啟OTG功能/USB?Host?API功能
這篇文章主要介紹了Android開啟OTG功能/USB?Host?API功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07
如何設(shè)置Android studio 3.0顯示光標(biāo)返回上一次瀏覽位置的箭頭圖標(biāo)
這篇文章主要介紹了如何設(shè)置Android studio 3.0顯示光標(biāo)返回上一次瀏覽位置的箭頭圖標(biāo) 很多朋友反映剛升級(jí)了Android studio 3.0,發(fā)現(xiàn)光標(biāo)返回上一次瀏覽位置的箭頭圖標(biāo)沒有了,下文給大家介紹的非常詳細(xì),需要的朋友可以參考下2017-11-11
Flutter集成高德地圖并添加自定義Maker的實(shí)踐
本文主要介紹了Flutter集成高德地圖并添加自定義Maker的實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04

