Android 實現聊天界面


代碼:

 

ChatEntity.java類

 

 

[java]  

package com.ericssonlabs.chatdemo;  

  

public class ChatEntity {  

  

    private int userImage;  

    private String content;  

    private String chatTime;  

    private boolean isComeMsg;  

  

    public int getUserImage() {  

        return userImage;  

    }  

    public void setUserImage(int userImage) {  

        this.userImage = userImage;  

    }  

    public String getContent() {  

        return content;  

    }  

    public void setContent(String content) {  

        this.content = content;  

    }  

    public String getChatTime() {  

        return chatTime;  

    }  

    public void setChatTime(String chatTime) {  

        this.chatTime = chatTime;  

    }  

    public boolean isComeMsg() {  

        return isComeMsg;  

    }  

    public void setComeMsg(boolean isComeMsg) {  

        this.isComeMsg = isComeMsg;  

    }  

      

}  

 

ChatDemoActivity.java

 

[java] 

package com.ericssonlabs.chatdemo;  

  

import java.util.ArrayList;  

import java.util.List;  

  

import android.app.Activity;  

import android.content.Context;  

import android.os.Bundle;  

import android.view.LayoutInflater;  

import android.view.View;  

import android.view.View.OnClickListener;  

import android.view.ViewGroup;  

import android.view.Window;  

import android.widget.BaseAdapter;  

import android.widget.Button;  

import android.widget.EditText;  

import android.widget.ImageView;  

import android.widget.ListView;  

import android.widget.TextView;  

import android.widget.Toast;  

  

public class ChatDemoActivity extends Activity {  

    private Button sendButton = null,button1,button2;  

    private EditText contentEditText = null;  

    private ListView chatListView = null;  

    private List<ChatEntity> chatList = null;  

    private ChatAdapter chatAdapter = null;  

    boolean jianghua;  

      

    @Override  

    public void onCreate(Bundle savedInstanceState) {  

        super.onCreate(savedInstanceState);  

        requestWindowFeature(Window.FEATURE_NO_TITLE);  

        setContentView(R.layout.main);  

          

        contentEditText = (EditText) this.findViewById(R.id.et_content);  

        sendButton = (Button) this.findViewById(R.id.btn_send);  

        button1 = (Button) findViewById(R.id.button1);  

        button2 = (Button) findViewById(R.id.button2);  

        chatListView = (ListView) this.findViewById(R.id.listview);  

          

        button1.setOnClickListener(new OnClickListener() {  

              

            @Override  

            public void onClick(View v) {  

                if (!jianghua) {  

                    // TODO Auto-generated method stub  

                    button2.setVisibility(View.VISIBLE);  

                }else {  

                    button2.setVisibility(View.INVISIBLE);  

                }  

            }  

        });  

          

        button2.setOnClickListener(new OnClickListener() {  

              

            @Override  

            public void onClick(View v) {  

                // TODO Auto-generated method stub  

                  

            }  

        });  

          

          

        chatList = new ArrayList<ChatEntity>();  

        ChatEntity chatEntity = null;  

        for (int i = 0; i < 2; i++) {  

            chatEntity = new ChatEntity();  

            if (i % 2 == 0) {  

                chatEntity.setComeMsg(false);  

                chatEntity.setContent("Hello");  

                chatEntity.setChatTime("2012-09-20 15:12:32");  

            }else {  

                chatEntity.setComeMsg(true);  

                chatEntity.setContent("Hello,nice to meet you!");  

                chatEntity.setChatTime("2012-09-20 15:13:32");  

            }  

            chatList.add(chatEntity);  

        }  

          

        chatAdapter = new ChatAdapter(this,chatList);  

        chatListView.setAdapter(chatAdapter);  

          

        sendButton.setOnClickListener(new OnClickListener() {  

              

            @Override  

            public void onClick(View v) {  

                if (!contentEditText.getText().toString().equals("")) {  

                    //發送消息  

                    send();  

                }else {  

                    Toast.makeText(ChatDemoActivity.this, "Content is empty", Toast.LENGTH_SHORT).show();  

                }  

            }  

        });  

          

    }  

      

    private void send(){  

        ChatEntity chatEntity = new ChatEntity();  

        chatEntity.setChatTime("2012-09-20 15:16:34");  

        chatEntity.setContent(contentEditText.getText().toString());  

        chatEntity.setComeMsg(false);  

        chatList.add(chatEntity);  

        chatAdapter.notifyDataSetChanged();  

        chatListView.setSelection(chatList.size() – 1);  

        contentEditText.setText("");  

    }  

      

    private  class ChatAdapter extends BaseAdapter{  

        private Context context = null;  

        private List<ChatEntity> chatList = null;  

        private LayoutInflater inflater = null;  

        private int COME_MSG = 0;  

        private int TO_MSG = 1;  

          

        public ChatAdapter(Context context,List<ChatEntity> chatList){  

            this.context = context;  

            this.chatList = chatList;  

            inflater = LayoutInflater.from(this.context);  

        }  

  

        @Override  

        public int getCount() {  

            return chatList.size();  

        }  

  

        @Override  

        public Object getItem(int position) {  

            return chatList.get(position);  

        }  

  

        @Override  

        public long getItemId(int position) {  

            return position;  

        }  

          

        @Override  

        public int getItemViewType(int position) {  

            // 區別兩種view的類型,標註兩個不同的變量來分別表示各自的類型  

            ChatEntity entity = chatList.get(position);  

            if (entity.isComeMsg())  

            {  

                return COME_MSG;  

            }else{  

                return TO_MSG;  

            }  

        }  

  

        @Override  

        public int getViewTypeCount() {  

            // 這個方法默認返回1,如果希望listview的item都是一樣的就返回1,我們這裡有兩種風格,返回2  

            return 2;  

        }  

  

        @Override  

        public View getView(int position, View convertView, ViewGroup parent) {  

            ChatHolder chatHolder = null;  

            if (convertView == null) {  

                chatHolder = new ChatHolder();  

                if (chatList.get(position).isComeMsg()) {  

                    convertView = inflater.inflate(R.layout.chat_from_item, null);  

                }else {  

                    convertView = inflater.inflate(R.layout.chat_to_item, null);  

                }  

                chatHolder.timeTextView = (TextView) convertView.findViewById(R.id.tv_time);  

                chatHolder.contentTextView = (TextView) convertView.findViewById(R.id.tv_content);  

                chatHolder.userImageView = (ImageView) convertView.findViewById(R.id.iv_user_image);  

                convertView.setTag(chatHolder);  

            }else {  

                chatHolder = (ChatHolder)convertView.getTag();  

            }  

              

            chatHolder.timeTextView.setText(chatList.get(position).getChatTime());  

            chatHolder.contentTextView.setText(chatList.get(position).getContent());  

            chatHolder.userImageView.setImageResource(chatList.get(position).getUserImage());  

              

            return convertView;  

        }  

          

        private class ChatHolder{  

            private TextView timeTextView;  

            private ImageView userImageView;  

            private TextView contentTextView;  

        }  

          

    }  

}  

 

chat_from_item.xml

 

[html]  

<?xml version="1.0" encoding="utf-8"?>  

<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"  

    android:layout_width="fill_parent"  

    android:orientation="vertical"  

    android:paddingBottom="5dp"  

    android:layout_height="wrap_content" >  

  

    <TextView  

            android:id="@+id/tv_time"  

            android:layout_width="wrap_content"  

            android:layout_height="wrap_content"  

            android:layout_gravity="center_horizontal"  

            android:background="#bfbfbf"  

            android:paddingTop="2dp"  

            android:paddingBottom="2dp"  

            android:paddingLeft="4dp"  

            android:paddingRight="4dp"  

            android:textColor="#ffffff"  

            android:textSize="12sp" />  

      

    <RelativeLayout  

        android:layout_width="fill_parent"  

        android:layout_height="wrap_content"  

        android:layout_marginTop="5dp" >  

  

        <ImageView  

            android:id="@+id/iv_user_image"  

            android:layout_width="50dp"  

            android:layout_height="50dp"  

            android:layout_alignParentLeft="true"  

            android:layout_alignParentTop="true"  

            android:background="@drawable/mypic"  

            android:focusable="false" />  

  

        <TextView  

            android:id="@+id/tv_content"  

            android:layout_width="wrap_content"  

            android:layout_height="wrap_content"  

            android:layout_marginLeft="5dp"  

            android:layout_toRightOf="@+id/iv_user_image"  

            android:background="@drawable/chatfrom_bg"  

            android:gravity="left|center"  

            android:clickable="true"  

            android:focusable="true"  

            android:lineSpacingExtra="2dp"  

            android:minHeight="50dp"  

            android:textColor="#ff000000"  

            android:textSize="14sp" />  

          

    </RelativeLayout>  

      

</LinearLayout>  

 

chat_to_item.xml

 

[html] 

<?xml version="1.0" encoding="utf-8"?>  

<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"  

    android:layout_width="fill_parent"  

    android:orientation="vertical"  

    android:paddingBottom="5dp"  

    android:layout_height="wrap_content" >  

  

    <TextView  

            android:id="@+id/tv_time"  

            android:layout_width="wrap_content"  

            android:layout_height="wrap_content"  

            android:background="#bfbfbf"  

            android:layout_gravity="center_horizontal"  

            android:paddingTop="2dp"  

            android:paddingBottom="2dp"  

            android:paddingLeft="4dp"  

            android:paddingRight="4dp"  

            android:textColor="#ffffff"  

            android:textSize="12sp" />  

      

    <RelativeLayout  

        android:layout_width="fill_parent"  

        android:layout_height="wrap_content"  

        android:layout_marginTop="5dp" >  

  

        <ImageView  

            android:id="@+id/iv_user_image"  

            android:layout_width="50dp"  

            android:layout_height="50dp"  

            android:layout_alignParentRight="true"  

            android:layout_alignParentTop="true"  

            android:background="@drawable/mypic"  

            android:focusable="false" />  

  

        <TextView  

            android:id="@+id/tv_content"  

            android:layout_width="wrap_content"  

            android:layout_height="wrap_content"  

            android:layout_marginRight="5dp"  

            android:layout_toLeftOf="@+id/iv_user_image"  

            android:background="@drawable/chatto_bg"  

            android:gravity="left|center"  

            android:clickable="true"  

            android:focusable="true"  

            android:lineSpacingExtra="2dp"  

            android:textColor="#ff000000"  

            android:textSize="14sp" />  

          

    </RelativeLayout>  

</LinearLayout>  

 

 

 

 

發佈留言