android-对话式聊天效果实现

使用android的短信息软件如有米短信,微信等,都有对话式的聊天效果,个人感觉挺好的,现在简单模仿实现下。
效果如下:







为了实现这种效果,需要弄两个不同的xml布局文件

我:list_say_me_item.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="horizontal" > <ImageView android:layout_width="42px" android:layout_height="42px" android:layout_gravity="bottom" android:id="@+id/messagegedetail_rov_icon" android:background="@drawable/image1" /> <LinearLayout android:orientation="vertical" android:layout_width="249dp" android:layout_height="wrap_content" android:background="@drawable/incoming" android:layout_marginLeft="5dp" > <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="22dip" > <TextView android:id="@+id/messagedetail_row_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#000000" android:paddingTop="2px" android:textSize="16dip" /> <TextView android:id="@+id/messagedetail_row_date" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#000000" android:paddingTop="2px" android:textSize="16dip" android:layout_marginLeft="60dip" /> </LinearLayout> <TextView android:id="@+id/messagedetail_row_text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingLeft="2px" android:textColor="#0000DD" android:textSize="16dip" /> </LinearLayout> </LinearLayout>
对方:list_say_he_item.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="horizontal" android:layout_marginLeft="10px" > <LinearLayout android:orientation="vertical" android:layout_width="249px" android:layout_height="wrap_content" android:background="@drawable/outgoing" android:layout_marginLeft="25px" > <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="22dip" > <TextView android:id="@+id/messagedetail_row_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#000000" android:paddingTop="2px" android:textSize="16dip" /> <TextView android:id="@+id/messagedetail_row_date" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#000000" android:paddingTop="2px" android:textSize="16dip" android:layout_marginLeft="60dip" /> </LinearLayout> <TextView android:id="@+id/messagedetail_row_text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingLeft="2px" android:textColor="#0000DD" android:textSize="16dip" /> </LinearLayout> <ImageView android:layout_width="42px" android:layout_height="42px" android:layout_gravity="bottom" android:id="@+id/messagegedetail_rov_icon" android:background="@drawable/image2" /> </LinearLayout>

主Activity文件:

import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; 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 ChatActivity extends Activity { private ListView talkView; private Button messageButton; private EditText messageText; private ArrayList<ChatMsg> list = new ArrayList<ChatMsg>(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); System.out.println("AAAAAAAAAA"); init(); } private void init(){ talkView = (ListView) findViewById(R.id.list); messageButton = (Button) findViewById(R.id.MessageButton); messageText = (EditText) findViewById(R.id.MessageText); messageButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub String name = getName(R.string.myDisplayName); String date =getDate(); String msgText =getText(); int RIdA = R.layout.list_say_me_item; ChatMsg newMsg = new ChatMsg(name,date,msgText,RIdA); list.add(newMsg); int RIdB = R.layout.list_say_he_item; String othername = getName(R.string.otherDisplayName); ChatMsg backMsg = new ChatMsg(othername,date,"自动回复(for test!)",RIdB); list.add(backMsg); talkView.setAdapter(new ChatMsgViewAdapter(ChatActivity.this,list)); messageText.setText(""); } }) ; } private String getName(int id){ return getResources().getString(id); } private String getDate(){ SimpleDateFormat sdf =new SimpleDateFormat("MM-dd HH:mm"); Date d = new Date(); return sdf.format(d); } private String getText(){ return messageText.getText().toString(); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); } }
Adapter:

import java.util.ArrayList; import android.content.Context; import android.database.DataSetObserver; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.LinearLayout; import android.widget.TextView; public class ChatMsgViewAdapter extends BaseAdapter { private static final String TAG = ChatMsgViewAdapter.class.getSimpleName(); private ArrayList<ChatMsg> list; private Context context; public ChatMsgViewAdapter(Context context,ArrayList<ChatMsg> list) { this.context = context; this.list = list; } public boolean areAllItemsEnabled() { return false; } public boolean isEnabled(int arg0) { return false; } @Override public int getCount() { // TODO Auto-generated method stub return list.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return list.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } public int getItemViewType(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ChatMsg msg = list.get(position); int itemlayout = msg.getLayoutID(); LinearLayout layout = new LinearLayout(context); LayoutInflater vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); vi.inflate(itemlayout, layout,true); TextView tvName = (TextView) layout.findViewById(R.id.messagedetail_row_name); tvName.setText(msg.getName()); TextView tvDate =(TextView) layout.findViewById(R.id.messagedetail_row_date); tvDate.setText(msg.getDate()); TextView tvText =(TextView) layout.findViewById(R.id.messagedetail_row_text); tvText.setText(msg.getText()); return layout; } public int getViewTypeCount() { return list.size(); } public boolean hasStableIds() { return false; } public boolean isEmpty() { return false; } public void registerDataSetObserver(DataSetObserver observer) { } public void unregisterDataSetObserver(DataSetObserver observer) { } }
ChatMsg: public class ChatMsg { private String name; private String date; private String text; private int layoutID; public ChatMsg(String name,String date,String text,int id) { this.name= name; this.date = date; this.text =text; this.layoutID = id; } 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; } }



只是个效果显示,喜欢的朋友可以弄个socket聊天试试,O(∩_∩)O哈哈~





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值