popwindow相对于dialog来说差不多 个人觉得dialog要更加好一点
先看个页面吧
经典的popwindow啊 !!!(而且看着还不错~) 用的时候感觉也不错, 但是接下来就发现了大坑 ,还不是一个还是两个!!!
1.按下返回键
在我们使用popwindow的时候经常的是会去设置一些动画比如说弹出动画,背景变暗这写种种东西,点击屏幕都可以来实现但是我要是按下返回键怎么办,好,OK现在我来说一下我的问题,我的popwindow使用的一个比较通用的方法,使popwindow弹出后背景变暗(最后会贴出来代码),写的非常的顺利也是,效果也是非常的好。但是突然发现的问题有点猝不及防,当时我的心情是这样的
what?发生了什么(这里不会发GIF图口述~)我按下了返回键之后popwindow消失了,但是背景透明还在,当时也是你找了很多的办法
1.1监听返回键
@Override
public void onBackPressed() {
super.onBackPressed();
}
用户按下返回键跟popwindow有啥关系不清楚 ,反正我按下第二次的时候才走的方法,不多解释,没用pass
1.2.布局监听
layout.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View view, int i, KeyEvent keyEvent) {
if (popupWindow != null) {
backgroundAlpha(1f);
popupWindow.dismiss();
return true;
}
return false;
}
});
其实这个我也不是很懂 也还是没有用pass
我也终于还是发起了场外救援
popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
@Override
public void onDismiss() {
backgroundAlpha(1f);
}
});
在popwindow消失之后的监听 消失了就恢复透明度 ,完美!!!
2.灭屏和亮屏
这个问题也是比较坑吧 (图片找不到了)f**k
就是在popwindow显示的时候进行息屏 再次打开popwindow还在但是透明度没有了,难受
@Override
protected void onRestart() {
super.onRestart();
boolean showing = popupWindow.isShowing();
if (showing) {
backgroundAlpha(0.5f);
return;
} else {
backgroundAlpha(1f);
return;
}
}
look 我在restare里面进行判断如果popwindow还在就透明,如果不在就不透明 ! 完美解决,非常nice
背景变暗的方法 this
public void backgroundAlpha(float bgAlpha) {
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.alpha = bgAlpha; //0.0-1.0
getWindow().setAttributes(lp);
}