點擊外部不消失,並且外部控件被攔截,不觸發ide
1.單獨設置一個XML佈局文件,設置彈出框格式。佈局
2.代碼實現:post
//顯示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()方法中設置,這樣會報錯。須要切換子線程,或者this
new Handler().postDelayed(new Runnable() { @Override public void run() { initpopu();//PopupWindow方法設置 } },500);
延遲0.5秒彈出spa