Android实际开发当中,经常会使用到Dialog以及PopWindow这些窗体控件,而这些控件的应用场景往往是这样的,切换横竖屏的时候,你要让它消失。其实正常情况下,在Activity中显示一个Dialog或者PopWindow的时候,切换横竖屏的时候,这些控件是会自动消失的。但是呢,如果你给Activity配置了如下属性,就会导致Dialog及PopWindow消失不了:
android:configChanges="screenSize|orientation"
这个属性设置之后,会导致Activity不会重新创建,原因就是Activity生命周期不会重新走一次(两者缺一不可)。这时候由于Activity没有销毁,在该Activity上的View以及窗体都不会销毁,Activity只会执行onConfigurationChanged方法,最后导致Dialog以及PopWindow在横竖屏切换时不会自动消失。
那么怎么解决这个问题呢?
1.监听Activity或Fragment的onConfigurationChanged方法,方向改变时自己设置让PopWindow(Dialog同理)消失。但是实际开发中,根本就没法预料你可能需要在哪个地方弹出来一个PopWindow,可能是在一个Fragment中可能是在一个自定义View中,也可能在不同的模块中,最烦的就是为传一个方向改变事件,要写好几个方法,一层一层的往下传。怎么让PopWindow自己去检测事件自己消失呢?看第二种方法。
2.我们都知道Activity以及Fragment都有监听方向改变的方法,就是onConfigurationChanged(),其实我们经常用到的View的方法也是有这个方法的,如下:
/**
* Called when the cur