点击外部不消失,而且外部控件被拦截,不触发
1.单独设置一个XML布局文件,设置弹出框格式。
2.代码实现:
//显示popuwindow View view = LayoutInflater.from(ExamActivity.this).inflate(R.layout.exam_pupo_layout, null); //创建一个popuwindow对象 popupWindow = new PopupWindow(view, 800, ViewGroup.LayoutParams.WRAP_CONTENT); //默认获取不到焦点,设置获取焦点 popupWindow.setFocusable(false); //只有在setFocusable(false)才生效,点击外部事件 popupWindow.setOutsideTouchable(false); //点击窗口以外区域,窗口消失 // popupWindow.setBackgroundDrawable(new BitmapDrawable()); //弹出或者消失的时候带动画效果 popupWindow.setAnimationStyle(R.style.dialogstyle); //显示popuwindow在父控件中央 popupWindow.showAtLocation(examRl, Gravity.CENTER, 0, 0); //设置屏幕透明度 setBackgroundAlpha(0.5f); Button btn_pupo = (Button) view.findViewById(R.id.btn_pupo); btn_pupo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { handler.postDelayed(runnable, 1000);//倒计时开始 popupWindow.dismiss(); } });
/** * 设置添加屏幕的背景透明度 * 屏幕透明度0.0-1.0 1表示完全不透明 */ public void setBackgroundAlpha(float bgAlpha) { WindowManager.LayoutParams lp = ((Activity) this).getWindow() .getAttributes(); lp.alpha = bgAlpha; ((Activity) this).getWindow().setAttributes(lp); }
/** * 判断popupWindow是否显示来决定是否往下分发事件 */ @Override public boolean dispatchTouchEvent(MotionEvent event) { if (popupWindow != null && popupWindow.isShowing()) { return false; } return super.dispatchTouchEvent(event); }
如果需要进入Activity就弹出的话
不可以直接在onCreate()方法中设置,这样会报错。需要切换子线程,或者
new Handler().postDelayed(new Runnable() { @Override public void run() { initpopu();//PopupWindow方法设置 } },500);
延迟0.5秒弹出