直接上代码,有注释,自己记录一下
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
overridePendingTransition(0, 0);//去掉切换动画,否则透明度会出现由不透明到半透明的//过渡效果
setBackgroundAlpha(this,0.5f);//设置0.5透明度,因为是修改属性设置,所以放到这个位//置了
setContentView(R.layout.activity_pop_win);
view= LayoutInflater.from(this).inflate(R.layout.layout_popwin,null);
windowview= getWindow().getDecorView();
ButterKnife.bind(this);
ib_close=view.findViewById(R.id.ib_close);
popupWindow = new PopupWindow(this);
popupWindow.setContentView(view);
popupWindow.setFocusable(true);
popupWindow.setOutsideTouchable(true);
// popupWindow.update();
popupWindow.setTouchInterceptor(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction()==MotionEvent.ACTION_OUTSIDE){
popupWindow.dismiss();
return true;
}
return false;
}
});
//直接再oncreate里调用showatlocation会报异常
windowview.post(new Runnable() {
@Override
public void run() {
if(popupWindow!=null&&!isFinishing()){
popupWindow.showAtLocation(windowview,Gravity.CENTER,0,0);
}
}
});
ib_close.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
popupWindow.dismiss();
}
});
//popwin关闭之后恢复透明度
popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
@Override
public void onDismiss() {
setBackgroundAlpha(PopWinActivity.this,1.0f);
}
});
}