Android泡泡聊天介面的實現

來源:互聯網
上載者:User


昨天寫了個介面,實現了Android泡泡聊天介面。運行結果如下,點擊發送按鈕,螢幕就顯示Text的內容。


我也是在網上的一份源碼的基礎上更改的,整個泡泡介面的實現要點:

(1)主介面其實就是一個List View 

       (2)文字顯示介面其實就使用了android:background="@drawable/incoming"這個東西。背景圖片的格式是xxx.9.png,專門用來縮放的,不然顯示效果非常差。

        (3)自訂了一個adapter,當然是繼承android.widget.BaseAdapter,重寫了getView的方法。

整個工程分布如下:


主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) {    }}

布局檔案看得我比較痛苦,這個布局檔案不好搞啊,呵呵

整個工程資源檔,我已經上傳到資源共用裡面了。

請大家這裡下載:

http://download.csdn.net/user/randyjiawenjie


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.