http://blog.youkuaiyun.com/vanpersie_9987/article/details/52761372
http://www.jb51.net/article/79129.htm
http://blog.youkuaiyun.com/nana129/article/details/45030057
http://104zz.iteye.com/blog/1709840
--------------------------------------------------------------------------------
[附件:FreebackDemoActivity.java]
package com.hipad.news.activity.personal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import com.hipad.controller.SSOController;
import com.hipad.news.activity.TitleBar;
import com.hipad.news.bean.ChatMsgEntity;
import com.hipad.news.main.R;
import com.hipad.news.main.R.layout;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.text.SpannableString;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class FreebackDemoActivity extends Activity implements OnClickListener {
private SSOController ssoController;
private TitleBar tilleBar;
private Button mBtnSend;
private EditText mEditTextContent;
private ListView mListView;
private ChatMsgAdapter mAdapter;
private List<ChatMsgEntity> mDataArrays = new ArrayList<ChatMsgEntity>();
private boolean isShosrt = false;
private String[] msgArray = new String[] { "你好服务器", "你也好", "请问你有什么问题", "我的问题多着呢 ", "先跟你反馈一个吧", "好的你说,我解决" };
private String[] dataArray = new String[] { "2012-10-31 18:00", "2012-10-31 18:10", "2012-10-31 18:11",
"2012-10-31 18:20", "2012-10-31 18:30", "2012-10-31 18:35" };
private final static int COUNT = 6;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_freeback_demo);
tilleBar = (TitleBar) findViewById(R.id.title_bar);
tilleBar.setTitle("意见反馈");
// 启动activity时不自动弹出软键盘
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
initView();
initData();
}
public void initView() {
mBtnSend = (Button) findViewById(R.id.send);
mEditTextContent = (EditText) findViewById(R.id.input_text);
mListView = (ListView) findViewById(R.id.msg_list_view);
mBtnSend.setOnClickListener(this);
mEditTextContent.setOnClickListener(this);
// mListView.setOnClickListener(this);
}
public void initData() {
for (int i = 0; i < COUNT; i++) {
ChatMsgEntity entity = new ChatMsgEntity();
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 ChatMsgAdapter(this, mDataArrays);
mListView.setAdapter(mAdapter);
}
public void send() {
String contString = mEditTextContent.getText().toString();
if (contString.length() > 0) {
ChatMsgEntity entity = new ChatMsgEntity();
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();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.send:
send();
break;
default:
break;
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK){
return true;
}
return super.onKeyDown(keyCode, event);
}
public class ChatMsgAdapter extends BaseAdapter {
int IMVT_COM_MSG = 0;
int IMVT_TO_MSG = 1;
private Context context;
private List<ChatMsgEntity> mdataArrays;
public ChatMsgAdapter(Context context,List<ChatMsgEntity> mdataArrays) {
super();
this.context = context;
this.mdataArrays = mdataArrays;
}
@Override
public int getCount() {
return mdataArrays.size();
}
@Override
public Object getItem(int position) {
return mdataArrays.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public int getItemViewType(int position) {
ChatMsgEntity entity = mdataArrays.get(position);
if (entity.getMsgType()) {
return IMVT_COM_MSG;
} else {
return IMVT_TO_MSG;
}
}
public int getViewTypeCount() {
return 2;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ChatMsgEntity entity = mdataArrays.get(position);
boolean isComMsg = entity.getMsgType();
ViewHolder viewHolder = null;
if (convertView == null) {
if (isComMsg) {
convertView = LayoutInflater.from(context).inflate(R.layout.freeback_list_item_left, parent, false);
} else {
convertView = LayoutInflater.from(context).inflate(R.layout.freeback_list_item_right, parent, false);
}
viewHolder = new ViewHolder();
viewHolder.tv_date = (TextView) convertView.findViewById(R.id.tv_sendtime);
viewHolder.tv_content = (TextView) convertView.findViewById(R.id.left_msg);
viewHolder.photo = (ImageView) convertView.findViewById(R.id.photo_left);
viewHolder.text_name = (TextView) convertView.findViewById(R.id.textname_left);
viewHolder.isComMsg = isComMsg;
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
// 设置数据
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
viewHolder.tv_date.setText(entity.getDate());
String spannableString = entity.getText().toString();//FaceConversionUtil.getInstace().getExpressionString(context, entity.getText());
viewHolder.tv_content.setText(spannableString);
return convertView;
}
private class ViewHolder {
private TextView tv_date;
private TextView tv_content;
private ImageView photo;
private TextView text_name;
public boolean isComMsg = true;
}
}
}
左面
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="10dp" >
<TextView
android:id="@+id/tv_sendtime"
style="@style/chat_text_date_style"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal" />
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left">
<RelativeLayout
android:id="@+id/left_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
>
<ImageView
android:id="@+id/photo_left"
android:layout_width="@dimen/pad_height_40"
android:layout_height="@dimen/pad_height_40"
android:src="@drawable/default_touxiangbg_one" />
<TextView
android:id="@+id/textname_left"
android:layout_width="wrap_content"
android:layout_height="@dimen/pad_height_15"
android:text="名字"
android:textSize="12sp"
android:layout_below="@+id/photo_left"/>
</RelativeLayout>
<TextView
android:id="@+id/left_msg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/message_left"
android:layout_toRightOf="@+id/left_layout"
android:layout_alignTop="@+id/left_layout"
/>
</RelativeLayout>
</LinearLayout>
右面布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="10dp" >
<TextView
android:id="@+id/tv_sendtime"
style="@style/chat_text_date_style"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal" />
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right" >
<TextView
android:id="@+id/left_msg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/right_layout"
android:background="@drawable/message_right" />
<RelativeLayout
android:id="@+id/right_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:layout_toRightOf="@+id/left_msg">
<ImageView
android:id="@+id/photo_left"
android:layout_width="@dimen/pad_height_40"
android:layout_height="@dimen/pad_height_40"
android:src="@drawable/default_touxiangbg_one" />
<TextView
android:id="@+id/textname_left"
android:layout_width="wrap_content"
android:layout_height="@dimen/pad_height_15"
android:layout_below="@+id/photo_left"
android:text="名字"
android:textSize="12sp" />
</RelativeLayout>
</RelativeLayout>
</LinearLayout>