tag:android 微信 listview 气泡
WeiXinListViewActivity.java
package org.com.cctest.listview;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import org.com.cctest.R;
import org.com.cctest.adapter.WeiXinListViewAdapter;
import org.com.cctest.bean.ChatMsgBean;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
public class WeiXinListViewActivity extends Activity implements OnClickListener{
/** Called when the activity is first created. */
private Button mBtnSend;
private EditText mEditTextContent;
private ListView mListView;
private WeiXinListViewAdapter mAdapter;
private List<ChatMsgBean> mDataArrays = new ArrayList<ChatMsgBean>();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.weixinlistview);
//启动activity时不自动弹出软键盘
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
initView();
initData();
}
public void initView()
{
mListView = (ListView) findViewById(R.id.listview);
mBtnSend = (Button) findViewById(R.id.btn_send);
mBtnSend.setOnClickListener(this);
mEditTextContent = (EditText) findViewById(R.id.et_sendmessage);
}
private String[]msgArray = new String[]{"你好s!", "你好", "请问您有什么事情?", "关于社保缺口的问题想咨询下",
"这个咱们目前是没戏了...", "不能吧?",
"...", "擦....",};
private String[]dataArray = new String[]{"2012-09-01 18:00", "2012-09-01 18:10",
"2012-09-01 18:11", "2012-09-01 18:20",
"2012-09-01 18:30", "2012-09-01 18:35",
"2012-09-01 18:40", "2012-09-01 18:50"};
private final static int COUNT = 8;
public void initData()
{
for(int i = 0; i < COUNT; i++)
{
ChatMsgBean entity = new ChatMsgBean();
entity.setDate(dataArray[i]);
if (i % 2 == 0)
{
entity.setName("客服");
entity.setMsgType(true);
}else{
entity.setName("用户");
entity.setMsgType(false);
}
entity.setText(msgArray[i]);
mDataArrays.add(entity);
}
mAdapter = new WeiXinListViewAdapter(this, mDataArrays);
mListView.setAdapter(mAdapter);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId())
{
case R.id.btn_send:
send();
}
}
private void send()
{
String contString = mEditTextContent.getText().toString();
if (contString.length() > 0)
{
ChatMsgBean entity = new ChatMsgBean();
entity.setDate(getDate());
entity.setName("人马");
entity.setMsgType(false);
entity.setText(contString);
mDataArrays.add(entity);
mAdapter.notifyDataSetChanged();
mEditTextContent.setText("");
mListView.setSelection(mListView.getCount() - 1);
}
}
private String getDate() {
Calendar c = Calendar.getInstance();
String year = String.valueOf(c.get(Calendar.YEAR));
String month = String.valueOf(c.get(Calendar.MONTH));
String day = String.valueOf(c.get(Calendar.DAY_OF_MONTH) + 1);
String hour = String.valueOf(c.get(Calendar.HOUR_OF_DAY));
String mins = String.valueOf(c.get(Calendar.MINUTE));
StringBuffer sbBuffer = new StringBuffer();
sbBuffer.append(year + "-" + month + "-" + day + " " + hour + ":" + mins);
return sbBuffer.toString();
}
public void head_xiaohei(View v) { //标题栏 返回按钮
}
}
weixinlistview.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="#f0f0f0">
<RelativeLayout
android:id="@+id/rl_bottom"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:layout_alignParentBottom="true"
android:background="@drawable/top_background" >
<Button
android:id="@+id/btn_send"
android:layout_width="wrap_content"
android:layout_height="40dp"
android:layout_alignParentRight="true"
android:layout_marginRight="10dp"
android:layout_centerVertical="true"
android:text="发送"
android:background="@drawable/send_btn" />
<EditText
android:id="@+id/et_sendmessage"
android:layout_width="fill_parent"
android:layout_toLeftOf="@id/btn_send"
android:layout_height="40dp"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:background="@drawable/textbg"
android:singleLine="true"
android:textSize="18sp"
android:layout_alignParentLeft="true"/>
</RelativeLayout>
<ListView
android:id="@+id/listview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:divider="@null"
android:dividerHeight="5dp"
android:cacheColorHint="#0000"
android:layout_above="@+id/rl_bottom"
/>
</RelativeLayout>
WeiXinListViewAdapter.java
package org.com.cctest.adapter;
import java.util.List;
import org.com.cctest.R;
import org.com.cctest.bean.ChatMsgBean;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
/*****
* http://blog.csdn.net/zhy_cheng/article/details/8214028
* */
public class WeiXinListViewAdapter extends BaseAdapter {
public static interface IMsgViewType
{
int IMVT_COM_MSG = 0;
int IMVT_TO_MSG = 1;
}
private static final String TAG = "WeiXinListViewAdapter";
private List<ChatMsgBean> coll;
private Context ctx;
private LayoutInflater mInflater;
public WeiXinListViewAdapter(Context context, List<ChatMsgBean> coll) {
ctx = context;
this.coll = coll;
mInflater = LayoutInflater.from(context);
}
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) {
// TODO Auto-generated method stub
ChatMsgBean entity = coll.get(position);
if (entity.getMsgType())
{
return IMsgViewType.IMVT_COM_MSG;
}else{
return IMsgViewType.IMVT_TO_MSG;
}
}
public int getViewTypeCount() {
// TODO Auto-generated method stub
return 2;
}
public View getView(int position, View convertView, ViewGroup parent) {
ChatMsgBean entity = coll.get(position);
boolean isComMsg = entity.getMsgType();
ViewHolder viewHolder = null;
if (convertView == null)
{
if (isComMsg)
{
convertView = mInflater.inflate(R.layout.weixinlistview_left, null);
}else{
convertView = mInflater.inflate(R.layout.weixinlistview_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.getText());
return convertView;
}
private class ViewHolder {
public TextView tvSendTime;
public TextView tvUserName;
public TextView tvContent;
public boolean isComMsg = true;
}
}
weixinlistview_left.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="6dp">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_horizontal">
<TextView
android:id="@+id/tv_sendtime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/chat_text_date_style"/>
</LinearLayout>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:layout_marginLeft="5dp" >
<ImageView
android:id="@+id/iv_userhead"
android:layout_width="52dp"
android:layout_height="52dp"
android:clickable="true"
android:onClick="head_xiaohei"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:background="@drawable/ic_launcher"/>
<!-- -->
<TextView
android:id="@+id/tv_chatcontent"
android:layout_toRightOf="@id/iv_userhead"
android:layout_marginLeft="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/chatfrom_bg"
style="@style/chat_content_date_style"/>
<TextView
android:id="@+id/tv_username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/iv_userhead"
android:layout_alignParentLeft="true"
android:layout_toLeftOf="@id/tv_chatcontent"
style="@style/chat_text_name_style"/>
</RelativeLayout>
</LinearLayout>
weixinlistview_right.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="6dp" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_horizontal">
<TextView
android:id="@+id/tv_sendtime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="2dp"
android:textColor="#ffffff"
android:textSize="12sp"
android:background="#bfbfbf"/>
</LinearLayout>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:layout_marginRight="5dp" >
<ImageView
android:id="@+id/iv_userhead"
android:layout_width="52dp"
android:layout_height="52dp"
android:focusable="false"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:background="@drawable/ic_launcher"/>
<TextView
android:id="@+id/tv_chatcontent"
android:layout_toLeftOf="@id/iv_userhead"
android:layout_marginRight="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/chatto_bg"
android:textSize="15sp"
android:textColor="#ff000000"
android:gravity="left|center"
android:minHeight="50dp"
android:lineSpacingExtra="2dp"
android:clickable="true"
android:focusable="true"/>
<TextView
android:id="@+id/tv_username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/iv_userhead"
android:layout_alignParentRight="true"
android:layout_toRightOf="@id/tv_chatcontent"
android:textSize="15sp"
android:gravity="center"
android:textColor="#818181"/>
</RelativeLayout>
</LinearLayout>
源代码可以从这里下载:http://download.csdn.net/detail/chen88358323/4823542