类似微信的ChattingUi

先看主页面布局

activity_imitate_weixin_main.xml

<RelativeLayout xmlns:android=""xmlns:tools=""android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="#f0f0e0" ><RelativeLayoutandroid:id="@+id/rl_bottom"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:background="@drawable/weixin_layout_bg1" ><Buttonandroid:id="@+id/btn_send"android:layout_width="60dp"android:layout_height="40dp"android:layout_alignParentRight="true"android:layout_centerVertical="true"android:layout_marginRight="10dp"android:text="发送" /><EditTextandroid:id="@+id/et_sendmessage"android:layout_width="fill_parent"android:layout_height="40dp"android:layout_centerVertical="true"android:layout_marginLeft="10dp"android:layout_marginRight="10dp"android:layout_toLeftOf="@id/btn_send"android:background="@drawable/weixin_edittext1"android:singleLine="true"android:textSize="18sp" /></RelativeLayout><ListViewandroid:id="@+id/listview"android:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_above="@id/rl_bottom"android:layout_marginLeft="10.0dip"android:layout_marginRight="10.0dip"android:layout_marginTop="10.0dip"android:cacheColorHint="#00000000"android:divider="@null"android:dividerHeight="5dp"android:scrollbars="none" /></RelativeLayout>再看入口WeixinChatDemoActivity

package com.example.weixindemo;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.ListView;/** * 仿微信主页面 */public class WeixinChatDemoActivity extends Activity implements OnClickListener {private Button mBtnSend;// 发送btnprivate EditText mEditTextContent;private ListView mListView;private ChatMsgViewAdapter mAdapter;// 消息视图的Adapterprivate List<ChatMsgEntity> mDataArrays = new ArrayList<ChatMsgEntity>();// 消息对象数组private final static int COUNT = 1;// 初始化数组总数@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_imitate_weixin_main);initView();}public void initView() {mListView = (ListView) findViewById(R.id.listview);mBtnSend = (Button) findViewById(R.id.btn_send);mEditTextContent = (EditText) findViewById(R.id.et_sendmessage);initData();// 初始化数据mBtnSend.setOnClickListener(this);mListView.setSelection(mAdapter.getCount() – 1);}/** * 模拟加载消息历史,实际开发可以从数据库中读出 */public void initData() {for (int i = 0; i < COUNT; i++) {ChatMsgEntity entity = new ChatMsgEntity();entity.setDate("2012-09-22 18:00:02");if (i % 2 == 0) {entity.setName("他人");entity.setMsgType(true);// 收到的消息} else {entity.setName("本人");entity.setMsgType(false);// 自己发送的消息}entity.setMessage("今晚去网吧包夜吧?");mDataArrays.add(entity);}mAdapter = new ChatMsgViewAdapter(this, mDataArrays);mListView.setAdapter(mAdapter);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn_send:// 发送按钮点击事件send();break;}}/** * 发送消息 */private void send() {String contString = mEditTextContent.getText().toString();if (contString.length() > 0) {ChatMsgEntity entity = new ChatMsgEntity();entity.setName("本人");entity.setDate(getDate());entity.setMessage(contString);entity.setMsgType(false);mDataArrays.add(entity);mAdapter.notifyDataSetChanged();// 通知ListView,数据已发生改变mEditTextContent.setText("");// 清空编辑框数据mListView.setSelection(mListView.getCount() – 1);// 发送一条消息时,ListView显示选择最后一项}}/** * 发送消息时,获取当前事件 * * @return 当前时间 */private String getDate() {SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");return format.format(new Date());}}再看适配器

ChatMsgViewAdapter

package com.example.weixindemo;import java.util.List;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;/** * 消息ListView的Adapter */public class ChatMsgViewAdapter extends BaseAdapter {private List<ChatMsgEntity> coll;// 消息对象数组private LayoutInflater mInflater;public ChatMsgViewAdapter(Context context, List<ChatMsgEntity> coll) {this.coll = coll;mInflater = LayoutInflater.from(context);}/*****************************************************///得到Item的类型,,是对方发过来的消息,还是自己发送出去的public int getItemViewType(int position) {return coll.get(position).getMsgType()?1:0;}//Item类型的总数public int getViewTypeCount() {return 2;}/******************************************************/public int getCount() {return coll.size();}public Object getItem(int position) {return coll.get(position);}public long getItemId(int position) {return position;}public View getView(int position, View convertView, ViewGroup parent) {ChatMsgEntity entity = coll.get(position);boolean isComMsg = entity.getMsgType();ViewHolder viewHolder = null;if (convertView == null) {if (isComMsg) {convertView = mInflater.inflate(R.layout.activity_imitate_weixin_chatting_item_msg_text_left, null);} else {convertView = mInflater.inflate(R.layout.activity_imitate_weixin_chatting_item_msg_text_right, null);}viewHolder = new ViewHolder();viewHolder.tvSendTime = (TextView) convertView.findViewById(R.id.tv_sendtime);viewHolder.tvUserName = (TextView) convertView.findViewById(R.id.tv_username);viewHolder.tvContent = (TextView) convertView.findViewById(R.id.tv_chatcontent);viewHolder.isComMsg = isComMsg;convertView.setTag(viewHolder);} else {viewHolder = (ViewHolder) convertView.getTag();}viewHolder.tvSendTime.setText(entity.getDate());viewHolder.tvUserName.setText(entity.getName());viewHolder.tvContent.setText(entity.getMessage());return convertView;}static class ViewHolder {public TextView tvSendTime;public TextView tvUserName;public TextView tvContent;public boolean isComMsg = true;}}另外还辅助的bean类

ChatMsgEntity

失败是成功之母

类似微信的ChattingUi

相关文章:

你感兴趣的文章:

标签云: