android聊天界面对话气泡_Android泡泡聊天界面的实现

本文介绍如何在Android中创建聊天界面,包括使用List View、自定义adapter和背景图片来实现对话气泡效果。通过点击发送按钮,将输入的文字显示为气泡样式。关键点包括:使用xxx.9.png图片处理缩放、自定义ChatMsgViewAdapter以及设置ListView。
摘要由CSDN通过智能技术生成

昨天写了个界面,实现了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 list = new ArrayList();

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 coll;

private Context ctx;

public ChatMsgViewAdapter(Context context, ArrayList 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) {

}

}

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

整个工程资源文件,我已经上传到资源共享里面了。

请大家这里下载:

分享到:

2011-08-11 15:57

浏览 694

评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值