其实关于弹出PopupWindows背景变暗的方法很多,网上也有很多资料。比如通过设置获取windows属性来设置透明度,还有通过在最外层设置一个半透明的背景显示与隐藏来达到那种效果等等。
常用的就是
设置透明度(这是窗体本身的透明度,非背景)
1 WindowManager.LayoutParams lp=getWindow().getAttributes();
2 lp.alpha=0.3f;
3 getWindow().setAttributes(lp);
alpha在0.0f到1.0f之间。1.0完全不透明,0.0f完全透明
注意设置透明度是时候,有很多人按照上面的方法设置之后,没有任何效果
此时在加上,getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);就可以了
1 WindowManager.LayoutParams lp=getWindow().getAttributes();
2 lp.alpha=0.3f;
3 getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
4 getWindow().setAttributes(lp);
alpha在0.0f到1.0f之间。1.0完全不透明,0.0f完全透明
设置黑暗度
1 WindowManager.LayoutParams lp=getWindow().getAttributes();
2 lp.dimAmount=0.5f;
3 getWindow().setAttributes(lp);
4 getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
dimAmount在0.0f和1.0f之间,0.0f完全不暗,1.0f全暗
设置背景模糊
1 getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,
2 WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
例子:
private void showPopup() {
View view = LayoutInflater.from(this).inflate(R.layout.popup, null);
TextView content = (TextView) view.findViewById(R.id.popup_content);
Button btn_sure = (Button) view.findViewById(R.id.popup_btn_sure);
Button btn_cancel = (Button) view.findViewById(R.id.popup_btn_cancel);
final PopupWindow popup = new PopupWindow(view,
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
popup.setTouchable(true);
popup.setOutsideTouchable(true);
popup.showAtLocation(view, Gravity.CENTER, 0, 0);
// 设置背景颜色变透明
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.alpha = 0.7f;
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
getWindow().setAttributes(lp);
popup.setOnDismissListener(new OnDismissListener() {
@Override
public void onDismiss() {
popupwindow消失,透明度恢复
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.alpha = 1.0f;
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
getWindow().setAttributes(lp);
}
});
}