Dialog弹出框

网上已经有很多弹出框类型了,我自己也记录下自己遇到的。

这个其实不是最好的,但是对我来说是最适合的,

它适用于屏幕上下左右弹出都可以,根据自己的需要,自己设置

可以设置背景色,弹出框大小,以及位置等信息

	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();这个方法即可实现

猜你喜欢

转载自274137570-qq-com.iteye.com/blog/2373331