网上已经有很多弹出框类型了,我自己也记录下自己遇到的。
这个其实不是最好的,但是对我来说是最适合的,
它适用于屏幕上下左右弹出都可以,根据自己的需要,自己设置
可以设置背景色,弹出框大小,以及位置等信息
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();这个方法即可实现