Android popwindow踩坑结束

popwindow相对于dialog来说差不多 个人觉得dialog要更加好一点

先给大家看个页面吧

Android popwindow踩坑结束_第1张图片

 经典的popwindow啊 !!!(而且看着还不错~) 用的时候感觉也不错, 但是接下来就发现了大坑 ,还不是一个还是两个!!!

1.按下返回键 

            在我们使用popwindow的时候经常的是会去设置一些动画比如说弹出动画,背景变暗这写种种东西,点击屏幕都可以来实现但是我要是按下返回键怎么办,好,OK现在我来说一下我的问题,我的popwindow使用的一个比较通用的方法,使popwindow弹出后背景变暗(最后会贴出来代码),写的非常的顺利也是,效果也是非常的好。但是突然发现的问题有点猝不及防,当时我的心情是这样的

Android popwindow踩坑结束_第2张图片

            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

 

Android popwindow踩坑结束_第3张图片

 

我也终于还是发起了场外救援

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);
}

 

你可能感兴趣的:(Android popwindow踩坑结束)