自定义List列表显示短信内容,仿iphone短信气泡
短信消息实体类
package com.android;
/**
* 消息实体类
*
* @author Administrator
*
*/
public class DetailEntity
{
// 短信联系人
private String name;
// 短信日期
private String date;
// 短信内容
private String text;
// 布局ID
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 DetailEntity()
{
}
public DetailEntity(String name, String date, String text, int layoutID)
{
super();
this.name = name;
this.date = date;
this.text = text;
this.layoutID = layoutID;
}
}
适配器类 继承ListAdapter
package com.android;
import java.util.List;
import android.app.AlertDialog;
import android.content.Context;
import android.database.DataSetObserver;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.TextView;
/**
* 适配器
*
* @author Administrator
*
*/
public class DetailAdapter implements ListAdapter
{
private List<DetailEntity> coll;
private Context ctx;
// 消息
DetailEntity entity;
LinearLayout layout;
// 加载布局
LayoutInflater vi;
// ------------------------------
// 背景
LinearLayout layout_bj;
TextView tvName;
TextView tvDate;
TextView tvText;
public DetailAdapter(Context context, List<DetailEntity> coll)
{
ctx = context;
this.coll = coll;
}
public boolean areAllItemsEnabled()
{
return true;
}
/**
* 为true监听Item
*/
public boolean isEnabled(int arg0)
{
return true;
}
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)
{
entity = coll.get(position);
int itemLayout = entity.getLayoutID();
// 加载布局
layout = new LinearLayout(ctx);
vi = (LayoutInflater) ctx
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
vi.inflate(itemLayout, layout, true);
layout.setBackgroundColor(0xffB4B4B4);
// 图片背景
layout_bj = (LinearLayout) layout.findViewById(R.id.layout_bj);
tvName = (TextView) layout.findViewById(R.id.messagedetail_row_name);
tvName.setText(entity.getName());
tvDate = (TextView) layout.findViewById(R.id.messagedetail_row_date);
tvDate.setText(entity.getDate());
tvText = (TextView) layout.findViewById(R.id.messagedetail_row_text);
tvText.setText(entity.getText());
// 添加监听
addListener(tvName, tvDate, tvText, layout_bj);
return layout;
}
public int getViewTypeCount()
{
return coll.size();
}
public boolean hasStableIds()
{
return true;
}
public boolean isEmpty()
{
return true;
}
@Override
public void registerDataSetObserver(DataSetObserver observer)
{
// TODO Auto-generated method stub
}
@Override
public void unregisterDataSetObserver(DataSetObserver observer)
{
// TODO Auto-generated method stub
}
/**
* 内容监听
*
* @param convertView
*/
public void addListener(final TextView tvName, final TextView tvDate,
final TextView tvText, LinearLayout layout_bj)
{
layout_bj.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
}
});
layout_bj.setOnLongClickListener(new OnLongClickListener()
{
@Override
public boolean onLongClick(View v)
{
tvName.setTextColor(0xffffffff);
tvDate.setTextColor(0xffffffff);
tvText.setTextColor(0xffffffff);
new AlertDialog.Builder(ctx).setTitle("当前是长按操作")
.setMessage("准备写个菜单").create().show();
return true;
}
});
// 按下改变字体颜色
layout_bj.setOnTouchListener(new OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
tvName.setTextColor(0xffffffff);
tvDate.setTextColor(0xffffffff);
tvText.setTextColor(0xffffffff);
break;
default:
tvName.setTextColor(0xff000000);
tvDate.setTextColor(0xff000000);
tvText.setTextColor(0xff0000ff);
break;
}
return false;
}
});
}
}
主Activity类
package com.android;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
public class MainActivity extends Activity
{
private ListView talkView;
private List<DetailEntity> list = null;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listInit();
}
public void listInit()
{
talkView = (ListView) findViewById(R.id.list);
list = new ArrayList<DetailEntity>();
DetailEntity d1 = new DetailEntity("私念", "2010-11-11", "你好!",
R.layout.list_say_me_item);
list.add(d1);
DetailEntity d2 = new DetailEntity("美女", "2010-11-11", "你好!",
R.layout.list_say_he_item);
list.add(d2);
DetailEntity d3 = new DetailEntity("美女", "2010-11-11", "你是谁?",
R.layout.list_say_he_item);
list.add(d3);
DetailEntity d4 = new DetailEntity("私念", "2010-11-11", "我是私念",
R.layout.list_say_me_item);
list.add(d4);
DetailEntity d5 = new DetailEntity("美女", "2010-11-11", "鬼认识你",
R.layout.list_say_he_item);
list.add(d5);
DetailEntity d6 = new DetailEntity("私念", "2010-11-11", "那就认识下",
R.layout.list_say_me_item);
list.add(d6);
DetailEntity d7 = new DetailEntity("美女", "2010-11-11", "切",
R.layout.list_say_he_item);
list.add(d7);
DetailEntity d8 = new DetailEntity("私念", "2010-11-11", "~~!",
R.layout.list_say_me_item);
list.add(d8);
talkView.setAdapter(new DetailAdapter(MainActivity.this, list));
// 去掉分割线
talkView.setDivider(null);
}
}
三个布局
main.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="fill_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
</ListView>
</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:layout_marginLeft="10px"
android:gravity="right"
android:orientation="horizontal" >
<LinearLayout
android:id="@+id/layout_bj"
android:layout_width="249px"
android:layout_height="wrap_content"
android:background="@drawable/outgoing"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="22dip"
android:orientation="horizontal" >
<TextView
android:id="@+id/messagedetail_row_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="2px"
android:textColor="#000000"
android:textSize="18dip" />
<TextView
android:id="@+id/messagedetail_row_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="60dip"
android:paddingTop="2px"
android:textColor="#000000"
android:textSize="16dip" />
</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="24dip" />
</LinearLayout>
<ImageView
android:id="@+id/messagegedetail_rov_icon"
android:layout_width="42px"
android:layout_height="42px"
android:layout_gravity="bottom"
android:background="@drawable/retouxiang" />
</LinearLayout>
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:id="@+id/messagegedetail_rov_icon"
android:layout_width="42px"
android:layout_height="42px"
android:layout_gravity="bottom"
android:background="@drawable/retouxiang" />
<LinearLayout
android:id="@+id/layout_bj"
android:layout_width="249px"
android:layout_height="wrap_content"
android:background="@drawable/incoming"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="22dip"
android:orientation="horizontal" >
<TextView
android:id="@+id/messagedetail_row_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="2px"
android:textColor="#000000"
android:textSize="18dip" />
<TextView
android:id="@+id/messagedetail_row_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="60dip"
android:paddingTop="2px"
android:textColor="#000000"
android:textSize="16dip" />
</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="24dip" />
</LinearLayout>
</LinearLayout>
DEMO下载地址http://download.csdn.net/detail/tt5267621/3752867