仿iphone 气泡短信 自定义list适配器实现

自定义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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值