首页 > 系统 > Android > 正文

Android编程实现泡泡聊天界面实例详解(附源码下载)

2019-10-24 20:33:35
字体:
来源:转载
供稿:网友

这篇文章主要介绍了Android编程实现泡泡聊天界面,结合实例形式较为详细的分析了Android泡泡聊天界面的窗体定义与功能实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了Android编程实现泡泡聊天界面的方法。分享给大家供大家参考,具体如下:

昨天写了个界面,实现了Android泡泡聊天界面。运行结果如下,点击发送按钮,屏幕就显示Text的内容。

Android编程实现泡泡聊天界面实例详解(附源码下载)

我也是在网上的一份源码的基础上更改的,整个泡泡界面的实现要点:

(1)主界面其实就是一个List View

(2)文字显示界面其实就使用了android:background="@drawable/incoming"这个东西。背景图片的格式是xxx.9.png,专门用来缩放的,不然显示效果非常差。

(3)自定义了一个adapter,当然是继承android.widget.BaseAdapter,重写了getView的方法。

整个工程分布如下:

Android编程实现泡泡聊天界面实例详解(附源码下载)

主activity: ChatActivity如下:

 

 
  1. package com.tencent;  
  2. import android.app.Activity;  
  3. import android.os.Bundle;  
  4. import android.util.Log;  
  5. import android.view.View;  
  6. import android.view.View.OnClickListener;  
  7. import android.widget.Button;  
  8. import android.widget.EditText;  
  9. import android.widget.ListView;  
  10. import java.util.ArrayList;  
  11. import java.util.Calendar;  
  12. public class ChatActivity extends Activity {  
  13. private static final String TAG = ChatActivity.class.getSimpleName();;  
  14. private ListView talkView;  
  15. private Button messageButton;  
  16. private EditText messageText;  
  17. // private ChatMsgViewAdapter myAdapter;  
  18. private ArrayList<ChatMsgEntity> list = new ArrayList<ChatMsgEntity>();  
  19. public void onCreate(Bundle savedInstanceState) {  
  20. Log.v(TAG, "onCreate >>>>>>");  
  21. super.onCreate(savedInstanceState);  
  22. setContentView(R.layout.main);  
  23. talkView = (ListView) findViewById(R.id.list);  
  24. messageButton = (Button) findViewById(R.id.MessageButton);  
  25. messageText = (EditText) findViewById(R.id.MessageText);  
  26. OnClickListener messageButtonListener = new OnClickListener() {  
  27. @Override 
  28. public void onClick(View arg0) {  
  29. // TODO Auto-generated method stub  
  30. Log.v(TAG, "onclick >>>>>>>>");  
  31. String name = getName();  
  32. String date = getDate();  
  33. String msgText = getText();  
  34. int RId = R.layout.list_say_he_item;  
  35. ChatMsgEntity newMessage = new ChatMsgEntity(name, date, msgText, RId);  
  36. list.add(newMessage);  
  37. // list.add(d0);  
  38. talkView.setAdapter(new ChatMsgViewAdapter(ChatActivity.this, list));  
  39. messageText.setText("");  
  40. // myAdapter.notifyDataSetChanged();  
  41. }  
  42. };  
  43. messageButton.setOnClickListener(messageButtonListener);  
  44. }  
  45. // shuold be redefine in the future  
  46. private String getName() {  
  47. return getResources().getString(R.string.myDisplayName);  
  48. }  
  49. // shuold be redefine in the future  
  50. private String getDate() {  
  51. Calendar c = Calendar.getInstance();  
  52. String date = String.valueOf(c.get(Calendar.YEAR)) + "-" 
  53. + String.valueOf(c.get(Calendar.MONTH)) + "-" + c.get(c.get(Calendar.DAY_OF_MONTH));  
  54. return date;  
  55. }  
  56. // shuold be redefine in the future  
  57. private String getText() {  
  58. return messageText.getText().toString();  
  59. }  
  60. public void onDestroy() {  
  61. Log.v(TAG, "onDestroy>>>>>>");  
  62. // list = null;  
  63. super.onDestroy();  
  64. }  

显示消息体的定义

 

 
  1. package com.tencent;  
  2. public class ChatMsgEntity {  
  3. private static final String TAG = ChatMsgEntity.class.getSimpleName();  
  4. private String name;  
  5. private String date;  
  6. private String text;  
  7. private int layoutID;  
  8. public String getName() {  
  9. return name;  
  10. }  
  11. public void setName(String name) {  
  12. this.name = name;  
  13. }  
  14. public String getDate() {  
  15. return date;  
  16. }  
  17. public void setDate(String date) {  
  18. this.date = date;  
  19. }  
  20. public String getText() {  
  21. return text;  
  22. }  
  23. public void setText(String text) {  
  24. this.text = text;  
  25. }  
  26. public int getLayoutID() {  
  27. return layoutID;  
  28. }  
  29. public void setLayoutID(int layoutID) {  
  30. this.layoutID = layoutID;  
  31. }  
  32. public ChatMsgEntity() {  
  33. }  
  34. public ChatMsgEntity(String name, String date, String text, int layoutID) { 
  35. super();  
  36. this.name = name;  
  37. this.date = date;  
  38. this.text = text;  
  39. this.layoutID = layoutID;  
  40. }  

ChatMsgViewAdapter定义如下:

 

 
  1. package com.tencent;  
  2. import android.content.Context;  
  3. import android.database.DataSetObserver;  
  4. import android.util.Log;  
  5. import android.view.LayoutInflater;  
  6. import android.view.View;  
  7. import android.view.ViewGroup;  
  8. import android.widget.BaseAdapter;  
  9. import android.widget.LinearLayout;  
  10. import android.widget.TextView;  
  11. import java.util.ArrayList;  
  12. public class ChatMsgViewAdapter extends BaseAdapter {  
  13. private static final String TAG = ChatMsgViewAdapter.class.getSimpleName(); 
  14. private ArrayList<ChatMsgEntity> coll;  
  15. private Context ctx;  
  16. public ChatMsgViewAdapter(Context context, ArrayList<ChatMsgEntity> coll) { 
  17. ctx = context;  
  18. this.coll = coll;  
  19. }  
  20. public boolean areAllItemsEnabled() {  
  21. return false;  
  22. }  
  23. public boolean isEnabled(int arg0) {  
  24. return false;  
  25. }  
  26. public int getCount() {  
  27. return coll.size();  
  28. }  
  29. public Object getItem(int position) {  
  30. return coll.get(position);  
  31. }  
  32. public long getItemId(int position) {  
  33. return position;  
  34. }  
  35. public int getItemViewType(int position) {  
  36. return position;  
  37. }  
  38. public View getView(int position, View convertView, ViewGroup parent) {  
  39. Log.v(TAG, "getView>>>>>>>");  
  40. ChatMsgEntity entity = coll.get(position);  
  41. int itemLayout = entity.getLayoutID();  
  42. LinearLayout layout = new LinearLayout(ctx);  
  43. LayoutInflater vi = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
  44. vi.inflate(itemLayout, layout, true);  
  45. TextView tvName = (TextView) layout.findViewById(R.id.messagedetail_row_name);  
  46. tvName.setText(entity.getName());  
  47. TextView tvDate = (TextView) layout.findViewById(R.id.messagedetail_row_date);  
  48. tvDate.setText(entity.getDate());  
  49. TextView tvText = (TextView) layout.findViewById(R.id.messagedetail_row_text);  
  50. tvText.setText(entity.getText());  
  51. return layout;  
  52. }  
  53. public int getViewTypeCount() {  
  54. return coll.size();  
  55. }  
  56. public boolean hasStableIds() {  
  57. return false;  
  58. }  
  59. public boolean isEmpty() {  
  60. return false;  
  61. }  
  62. public void registerDataSetObserver(DataSetObserver observer) {  
  63. }  
  64. public void unregisterDataSetObserver(DataSetObserver observer) {  
  65. }  
  66. }  

布局文件看得我比较痛苦,这个布局文件不好搞啊,呵呵

完整实例代码代码点击此处本站下载。

希望本文所述对大家Android程序设计有所帮助。


注:相关教程知识阅读请移步到Android开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表