1.//popWindow命名為window。
//首先給window設置一個背景顏色
ColorDrawable cd = new ColorDrawable(0x000000);
window.setBackgroundDrawable(cd);
// 產生背景變暗效果,設置透明度
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.alpha = 0.4f;
//之前不寫這一句也是可以實現的,這次突然沒效果了。網搜之后加上了這一句就好了。據說是因為popUpWindow沒有getWindow()方法。
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
getWindow().setAttributes(lp);
//這樣就設置好了變暗的效果
2.//然后再設置退出popupwindow時取消暗背景
window.setOnDismissListener(new OnDismissListener() {
@Override
public void onDismiss() {
//在dismiss中恢復透明度
WindowManager.LayoutParams lp=getWindow().getAttributes();
lp.alpha=1f;
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
getWindow().setAttributes(lp);
}
});
//這樣寫效率不高,代碼重復。優化之后:
private void darkenBackgroud(Float bgcolor) {
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.alpha = bgcolor;
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
getWindow().setAttributes(lp);
}
調用時:
1.使變暗:darkenBackgroud(0.4f);
2.使恢復:darkenBackgroud(1f);