package com.example.popupwindowtest;
import java.util.ArrayList;
import java.util.List;
import android.R.integer;
import android.R.string;
import android.app.Activity;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Display;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private ListView mListView;
private List<String> mItems;
private PopupWindow mPopupWindow;
private View contentView;
private int mScreenHeight;
private Button ibtn1, ibtn2, ibtn3;
private TextView showinfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化数据
initItems();
// 用于显示信息
showinfo = (TextView) findViewById(R.id.show);
// 弹窗初始化
LayoutInflater lf = (LayoutInflater) MainActivity.this
.getSystemService(LAYOUT_INFLATER_SERVICE);
contentView = lf.inflate(R.layout.popupwindow, null);
mPopupWindow = new PopupWindow(contentView, LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT);
mPopupWindow.setFocusable(true);
mPopupWindow.setOutsideTouchable(true);
mPopupWindow.setBackgroundDrawable(new BitmapDrawable());
// 列表初始化
mListView = (ListView) findViewById(R.id.listView1);
mListView.setAdapter(new ArrayAdapter<String>(this, R.layout.item,
mItems));
// 获取屏幕实际像素
mScreenHeight = getScreenHeight();
// 列表项长按事件
mListView.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(MainActivity.this, "你长按了第" + position + "项",
Toast.LENGTH_SHORT).show();
// 获取被点击项所在位置
int[] a = new int[2];
view.getLocationOnScreen(a);
showinfo.setText("x=" + a[0] + " y=" + a[1]);
// 在指定位置显示弹窗, 以底部中间为基准点
mPopupWindow.showAtLocation(mListView, Gravity.BOTTOM
| Gravity.CENTER, 0, mScreenHeight - a[1]);
return false;
}
});
// 弹窗内的按钮点击事件
ibtn1 = (Button) contentView.findViewById(R.id.ibutton1);
ibtn2 = (Button) contentView.findViewById(R.id.ibutton2);
ibtn3 = (Button) contentView.findViewById(R.id.ibutton3);
MyOnClickListener myOnClickListener = new MyOnClickListener();
ibtn1.setOnClickListener(myOnClickListener);
ibtn2.setOnClickListener(myOnClickListener);
ibtn3.setOnClickListener(myOnClickListener);
}
// 列表数据初始化
private void initItems() {
mItems = new ArrayList<String>();
for (int i = 0; i < 20; i++) {
mItems.add("项目" + i);
}
}
// 点击事件
private class MyOnClickListener implements View.OnClickListener {
@Override
public void onClick(View v) {
Button btn = (Button) v;
showinfo.setText(btn.getText());
}
}
/**
* 获取屏幕高度像素
*
* @return
*/
private int getScreenHeight() {
// 获取屏幕实际像素
DisplayMetrics displayMetrics = new DisplayMetrics();
Display display = MainActivity.this.getWindowManager()
.getDefaultDisplay();
display.getMetrics(displayMetrics);
return displayMetrics.heightPixels;
}
}
import java.util.ArrayList;
import java.util.List;
import android.R.integer;
import android.R.string;
import android.app.Activity;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Display;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private ListView mListView;
private List<String> mItems;
private PopupWindow mPopupWindow;
private View contentView;
private int mScreenHeight;
private Button ibtn1, ibtn2, ibtn3;
private TextView showinfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化数据
initItems();
// 用于显示信息
showinfo = (TextView) findViewById(R.id.show);
// 弹窗初始化
LayoutInflater lf = (LayoutInflater) MainActivity.this
.getSystemService(LAYOUT_INFLATER_SERVICE);
contentView = lf.inflate(R.layout.popupwindow, null);
mPopupWindow = new PopupWindow(contentView, LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT);
mPopupWindow.setFocusable(true);
mPopupWindow.setOutsideTouchable(true);
mPopupWindow.setBackgroundDrawable(new BitmapDrawable());
// 列表初始化
mListView = (ListView) findViewById(R.id.listView1);
mListView.setAdapter(new ArrayAdapter<String>(this, R.layout.item,
mItems));
// 获取屏幕实际像素
mScreenHeight = getScreenHeight();
// 列表项长按事件
mListView.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(MainActivity.this, "你长按了第" + position + "项",
Toast.LENGTH_SHORT).show();
// 获取被点击项所在位置
int[] a = new int[2];
view.getLocationOnScreen(a);
showinfo.setText("x=" + a[0] + " y=" + a[1]);
// 在指定位置显示弹窗, 以底部中间为基准点
mPopupWindow.showAtLocation(mListView, Gravity.BOTTOM
| Gravity.CENTER, 0, mScreenHeight - a[1]);
return false;
}
});
// 弹窗内的按钮点击事件
ibtn1 = (Button) contentView.findViewById(R.id.ibutton1);
ibtn2 = (Button) contentView.findViewById(R.id.ibutton2);
ibtn3 = (Button) contentView.findViewById(R.id.ibutton3);
MyOnClickListener myOnClickListener = new MyOnClickListener();
ibtn1.setOnClickListener(myOnClickListener);
ibtn2.setOnClickListener(myOnClickListener);
ibtn3.setOnClickListener(myOnClickListener);
}
// 列表数据初始化
private void initItems() {
mItems = new ArrayList<String>();
for (int i = 0; i < 20; i++) {
mItems.add("项目" + i);
}
}
// 点击事件
private class MyOnClickListener implements View.OnClickListener {
@Override
public void onClick(View v) {
Button btn = (Button) v;
showinfo.setText(btn.getText());
}
}
/**
* 获取屏幕高度像素
*
* @return
*/
private int getScreenHeight() {
// 获取屏幕实际像素
DisplayMetrics displayMetrics = new DisplayMetrics();
Display display = MainActivity.this.getWindowManager()
.getDefaultDisplay();
display.getMetrics(displayMetrics);
return displayMetrics.heightPixels;
}
}