【内容源于网络,在此作个笔记】
private PopupWindow popupWindow;
private View contentView;
/**
* 显示 popup window
*/
private void showPopupWindow(){
contentView = LayoutInflater.from(getContext())
.inflate(R.layout.popup_layout, null);
popupWindow = new PopupWindow(contentView,
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
popupWindow.setFocusable(true);// 取得焦点
//注意 要是点击外部空白处弹框消息 那么必须给弹框设置一个背景色 不然是不起作用的
popupWindow.setBackgroundDrawable(new BitmapDrawable());
//点击外部消失
popupWindow.setOutsideTouchable(true);
//设置可以点击
popupWindow.setTouchable(true);
//进入退出的动画,指定刚才定义的style
popupWindow.setAnimationStyle(R.style.PopWindowAnimStyle);
}
@OnClick(R.id.popup_window)
public void onClickEditTextView() {
popupWindow.showAtLocation(contentView, Gravity.BOTTOM, 0, 0);
/**
* 点击popupWindow让背景变暗
*/
final WindowManager.LayoutParams lp = getActivity().getWindow().getAttributes();
lp.alpha = 0.4f;//代表透明程度,范围为0 - 1.0f
getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
getActivity().getWindow().setAttributes(lp);
popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
@Override
public void onDismiss() {
lp.alpha = 1.0f;
getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
getActivity().getWindow().setAttributes(lp);
}
});
}
这里主要需要设置2处,第1处在popup window显示时设置窗体背景(透明度小于1),第2处是在隐藏popup window时,重新设置窗体背景(恢复透明度为1)
第1处:
final WindowManager.LayoutParams lp = getActivity().getWindow().getAttributes();
lp.alpha = 0.4f;//代表透明程度,范围为0 - 1.0f
getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
getActivity().getWindow().setAttributes(lp);
第2处:
popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
@Override
public void onDismiss() {
lp.alpha = 1.0f;
getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
getActivity().getWindow().setAttributes(lp);
}
});