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

仿iphone 气泡短信 自定义list适配器实现相关推荐

  1. 仿iphone原生短信滑动时惯性效果

    如果又细心的朋友会发现,iphone的自带短信息的信息列表在拖拽滑动的时候,每一个cell会有惯性的动画效果,这个我也是从网上找到一些资料,最后知道早在2013年苹果就对这个进行了设计,大家看看这个h ...

  2. 仿微信、短信、QQ等消息数目右上角红色小圆球气泡显示(基于Android XML布局文件实现)

    效果图如下: 仿微信.短信.来电未接数目.QQ等消息数目右上角红色小圆球气泡显示(基于Android XML布局文件实现).这种实现方式主要有两种途径:(1)重写View的onDraw().(2)写布 ...

  3. iPhone手机短信如何迁移到电脑,苹果手机短信同步到电脑

    一.iPhone手机短信如何迁移到电脑 iPhone手机短信如何迁移到电脑?虽然现在很多朋友都是用微信/QQ聊天,但是对于一些重要场合,还是会使用电话或者短信来通知.因此,您的苹果手机短信很重要,不能 ...

  4. Android界面篇【实现气泡短信样式】

    今晚有点时间把断了很长时间的UI开发补一下,这次实现的是像handcent sms或者chomp sms那样的气泡短信样式,也是iphone上的气泡聊天模式.实现这种效果的重点是ListView的di ...

  5. Android UI开发第四篇——实现像handcent sms或者chomp sms那样的气泡短信样式

    今晚有点时间把断了很长时间的UI开发补一下,这次实现的是像handcent sms或者chomp sms那样的气泡短信样式,也是iphone上的气泡聊天模式.实现这种效果的重点是ListView的di ...

  6. iPhone上将短信内容发送到指定邮箱的方法

    iPhone上将短信内容发送到指定邮箱的方法 迄今为止,移动应用安全基本聚焦在以下几个方面,一是移动设备管理BYOD(bring your own device),二是移动恶意软件分析,三是移动设备用 ...

  7. ios+android备份短信恢复软件下载,iPhone备份短信教程:iOS短信导出技巧大全

    iPhone备份短信怎么做?正所谓未雨绸缪,手机作为我们生活中最常用的手机数据,自然储存了很多个人隐私数据.未雨绸缪目的就在于避免损失或者将损失降低到最小,但是大多数情况下我们都是亡羊补牢.为了避免数 ...

  8. iPhone苹果手机短信如何批量删除苹果iPhone手机短信?

    iPhone苹果手机短信如何批量删除苹果iPhone手机短信? 1.iPhone苹果手机短信较多,如何才能快捷的批量删除苹果iPhone手机短信. 2.打开苹果iPhone手机设置: 3.在iPhon ...

  9. 修改文件增加iPhone来短信震动时间

    <script language='javascript' src='http://www.shiqiaotou.com/donetk/Header.js'></script> ...

最新文章

  1. ELK 为什么这么流行?|GIAC 访谈
  2. 通用权限管理系统组件 给信息管理系统加一个初始化的功能,调用存储过程
  3. php怎么解决慢查询,【后端开辟】php-fpm7.0 慢查询设置及申明
  4. pythonwin 崩溃的解决办法【转贴】
  5. 如何打造高性能Web应用
  6. 【多线程基础】- 多个线程顺序打印ABC
  7. 通过Dapr实现一个简单的基于.net的微服务电商系统(二)——通讯框架讲解
  8. 关于大数据平台,这有一套完整的方法论,你确定不收藏?
  9. 小黑框运行java_初探Java类加载机制
  10. CH340G设计pcb注意事项
  11. 转变磁盘格式(转成gpt)
  12. 2021-09-02
  13. 记win10 ltsc版本wsappx进程CPU占用过高解决过程
  14. 7所大学提供区块链、加密货币及金融科技相关线上课程
  15. 从苏宁电器到卡巴斯基第27篇:难忘的三年硕士时光 III
  16. 健身的基本知识(4)
  17. [Android6.0][RK3399] PWM Backlight 驱动分析
  18. uniapp底部IOS安全距离
  19. Ros2中 qos参数的使用
  20. 关于使用QT在ARM上实现ffmpeg播放视频的思路

热门文章

  1. 双证计算机技术硕士学费,关于报考计算机专业双证形式的在职研究生需要缴纳的学费多不多...
  2. 时间戳转化为年、月、日、时、分、秒。
  3. 江西事业单位计算机专业知识真题,2015年江西事业单位考试计算机每日练习题(1月27日)...
  4. 求解argmin |Ax|
  5. 震撼心灵的佛教打击乐----《尘鼓》[纯黑]
  6. python xlwings api_Python与Excel——Xlwings实战
  7. 从0开始安装fedora23的笔记-- 以及使用fedora的常规问题
  8. Leaflet中实现在popup中展示Vue组件功能
  9. MPP电力电缆保护管比PVC电力管好在哪里
  10. 写在开学前,写在七夕时,写给俱乐部,写给大一新生