PopupWindow彈出框

點擊外部不消失,並且外部控件被攔截,不觸發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

相關文章
相關標籤/搜索