网上已经有很多弹出框类型了,我自己也记录下自己遇到的。
这个其实不是最好的,但是对我来说是最适合的,
它适用于屏幕上下左右弹出都可以,根据自己的需要,自己设置
可以设置背景色,弹出框大小,以及位置等信息
private int mWidth;
private int mHeight;
PopupWindow popupWindow;
int from = 0;
private StartYSJDialogAdapter mDialogAdapter;
private GridView ysp_gridlistview;
/**
* 添加新笔记时弹出的popWin关闭的事件,主要是为了将背景透明度改回来
*
*/
class popupDismissListener implements PopupWindow.OnDismissListener {
@Override
public void onDismiss() {
backgroundAlpha(1f);
}
}
protected void initPopupWindow() {
// initData();
View popupWindowView = this.getLayoutInflater().inflate(
R.layout.startysjdialoglist, null);
// 内容,高度,宽度
if (Location.LEFT.ordinal() == from) {
popupWindow = new PopupWindow(popupWindowView,
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, true);
} else {
popupWindow = new PopupWindow(popupWindowView,
LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT, true);
}
// 动画效果
if (Location.LEFT.ordinal() == from) {
popupWindow.setAnimationStyle(R.style.AnimationLeftFade);
} else if (Location.RIGHT.ordinal() == from) {
popupWindow.setAnimationStyle(R.style.AnimationRightFade);
} else if (Location.BOTTOM.ordinal() == from) {
popupWindow.setAnimationStyle(R.style.AnimationBottomFade);
}
// 菜单背景色
ColorDrawable dw = new ColorDrawable(android.R.color.transparent);
popupWindow.setBackgroundDrawable(dw);
calWidthAndHeight(this);
// 宽度
popupWindow.setWidth(mWidth);
// //高度
popupWindow.setHeight(mHeight);
// 显示位置
if (Location.LEFT.ordinal() == from) {
popupWindow.showAtLocation(this.getLayoutInflater()
.inflate(R.layout.startysplist, null), Gravity.LEFT|Gravity.TOP, 0, 500);
} else if (Location.RIGHT.ordinal() == from) {
popupWindow.showAtLocation(this.getLayoutInflater()
.inflate(R.layout.startysplist, null), Gravity.RIGHT, 0, 500);
} else if (Location.BOTTOM.ordinal() == from) {
popupWindow.showAtLocation(this.getLayoutInflater()
.inflate(R.layout.startysplist, null), Gravity.BOTTOM
| Gravity.TOP, 0, 0);
}
// 设置背景半透明
backgroundAlpha(0.5f);
// 关闭事件
popupWindow.setOnDismissListener(new popupDismissListener());
popupWindowView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return false;
// /*if( popupWindow!=null && popupWindow.isShowing()){
// popupWindow.dismiss();
// popupWindow=null;
// }*/
// // 这里如果返回true的话,touch事件将被拦截
// // 拦截后 PopupWindow的onTouchEvent不被调用,这样点击外部区域无法dismiss
// return false;
}
});
ysp_gridlistview = (GridView) popupWindowView.findViewById(R.id.ysp_gridlistview);
getDialogAdapter();
ysp_gridlistview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
popupWindow.dismiss();
switch (position) {}
}
});
}
private void getDialogAdapter() {
mDialogAdapter = new StartYSJDialogAdapter(StartMainYSPActivity.this, yslFilterList,
R.layout.startysjdialoglist_item);
// mDialogAdapter.setOnCheckedChanged(StartMainYSPActivity.this);
ysp_gridlistview.setAdapter(mDialogAdapter);
}
/**
* 设置PopupWindow的大小
*
* @param context
*/
private void calWidthAndHeight(Context context) {
WindowManager wm = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics metrics = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(metrics);
mWidth = metrics.widthPixels-200;
// 设置高度为全屏高度的90%
// mHeight = (int) (500);
mHeight = (int) (metrics.heightPixels * 0.89);
}
/**
* 设置添加屏幕的背景透明度
*
* @param bgAlpha
*/
public void backgroundAlpha(float bgAlpha) {
WindowManager.LayoutParams lp = this.getWindow()
.getAttributes();
lp.alpha = bgAlpha; // 0.0-1.0
this.getWindow().setAttributes(lp);
}
/**
* 菜单弹出方向
*
*/
public enum Location {
LEFT, RIGHT, TOP, BOTTOM;
}
然后获取网络数据,调用initPopupWindow();这个方法即可实现