下面的PopupWindow 的高是相對於屏幕高設計,寬是獲取的某一個控件的寬設置,位置位於某控件的上方,紅色部分是設置彈出時屏幕變暗的。ide
1 //設置contentView 2 View contentView = LayoutInflater.from(this).inflate(R.layout.popwindow_submit, null); 3 photoPopWindow = new PopupWindow(contentView, WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT, true); 4 photoPopWindow.setContentView(contentView); 5 //獲取屏幕寬高度 6 DisplayMetrics dm = this.getResources().getDisplayMetrics(); 7 int screenWidth = dm.widthPixels; 8 int screenHeight = dm.heightPixels; 9 //根據屏幕寬高度設置popwindow大小 10 photoPopWindow.setWidth((int)(upload.getWidth())); 11 photoPopWindow.setHeight((int)(screenHeight * 0.13)); 12 13 //設置各個控件的點擊響應 14 rl_takePhoto = contentView.findViewById(R.id.rl_takePhoto); 15 rl_choicePhoto = contentView.findViewById(R.id.rl_choicePhoto); 16 rl_takePhoto.setOnClickListener(new View.OnClickListener() { 17 @Override 18 public void onClick(View v) { 19 keep.setBackgroundColor(getResources().getColor(R.color.white)); 20 upload.setBackgroundColor(getResources().getColor(R.color.color_success)); 21 paste.setBackgroundColor(getResources().getColor(R.color.white)); 22 submit(); 23 //上傳數據 24 photoPopWindow.dismiss(); 25 } 26 }); 27 rl_choicePhoto.setOnClickListener(new View.OnClickListener() { 28 @Override 29 public void onClick(View v) { 30 submitPhoto(); 31 //上傳圖片 32 photoPopWindow.dismiss(); 33 } 34 }); 35 int[] location = new int[2]; 36 //在控件上方顯示 37 int[] location1 = new int[2]; 38 upload.getLocationOnScreen(location); 39 //photoPopWindow.showAtLocation(upload,Gravity.NO_GRAVITY, location1[0],location1[1]-photoPopWindow.getHeight()); 40 photoPopWindow.showAtLocation(upload,Gravity.NO_GRAVITY, location1[0]+upload.getWidth(),screenHeight-photoPopWindow.getHeight()-upload.getHeight()); 41 42 // 設置背景顏色變暗 43 WindowManager.LayoutParams lp = this.getWindow().getAttributes(); 44 lp.alpha = 0.7f; 45 this.getWindow().setAttributes(lp); 46 photoPopWindow.setOnDismissListener(new PopupWindow.OnDismissListener() { 47 48 @Override 49 public void onDismiss() { 50 WindowManager.LayoutParams lp = getWindow().getAttributes(); 51 lp.alpha = 1f; 52 getWindow().setAttributes(lp); 53 } 54 });