在使用手机的时候看到这个效果,上网查了一下,是使用了PopupWindow实现的

在此记录一下:


主要代码:


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.ListActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.SimpleAdapter;

public class PopActivity extends ListActivity implements OnItemClickListener{
private List<Map<String,Object>> list ;
ListView listview;
PopupWindow pw = null;
//头像的Id数组
int head[] = {R.drawable.image1,R.drawable.image2,R.drawable.image3,
R.drawable.image4,R.drawable.image5};

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
listview = getListView();
initData();//生成几条记录
SimpleAdapter adapter =new SimpleAdapter(this, list,R.layout.people ,new String []{"head","name","num"} , new int []{R.id.head,R.id.text,R.id.num});
setListAdapter(adapter);
listview.setOnItemClickListener(this);
}
public void initData(){
list = new ArrayList<Map<String,Object>>();
for(int i = 0;i<5;i++){
Map<String ,Object> map = new HashMap<String, Object>();
map.put("head", head[i]);
map.put("name","第"+i+"位用户");
map.put("num","12445533"+i);
list.add(map);
}
}
@Override
public void onItemClick(AdapterView<?> arg0, View v, int position, long id) {
// TODO Auto-generated method stub
LayoutInflater factory = LayoutInflater.from(PopActivity.this);
final View textEntryView = factory.inflate(R.layout.paopao_alert_dialog, null);
//获取WindowManager对象
WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
int envWidth = wm.getDefaultDisplay().getWidth();
int envHeight = wm.getDefaultDisplay().getHeight();
if(pw == null)
{
pw = new PopupWindow(textEntryView);
pw.showAtLocation(v, Gravity.LEFT,0,0); //在父视图的左上方显示
}else if(!pw.isShowing()){
pw = new PopupWindow(textEntryView);
pw.showAtLocation(v, Gravity.LEFT,0,0);
}
int pwH = 70;
int pwW = 166;
int y = -envHeight/2+v.getTop() + pwH;
pw.update(0,y,pwW,pwH); //更新位置。
textEntryView.findViewById(R.id.phone).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
pw.dismiss();
}

});
}
}

主要就是OnItemClick()方法中的实现,获取WindowManager ,得到一个PopupWindow对象,然后显示出来,当然在实际中要去响应PopupWindow中的按钮事件了。