PopupWindow 写在事件监听里面是不会出现这个异常的,当你不写在事件监听里面,希望Activity被创建就弹出Popupwindow,最典型应该就是视频的播放吧,如图,我觉得再多的文字也当不了图形形象,上面那一排就是一个popupWindow
这时候如果你在onCreate就会出现WindowManager$BadTokenException异常,pupupWindow需要Activity获取到了焦点才能显示出来,也许你会想在onResume()方法让PopupWindow显示,因为onResume()是Activity获取到了焦点回调的方法,事实上我也这么想过,但还是行不通,onResume()是刚开始获得焦点就调用这个方法,先执行完了onResume(),之后在执行onWindowFocusChanged()
?
class="java"> //the activity has Focus show popupwindow,else throws android.view.WindowManager$BadTokenException @Override public void onWindowFocusChanged(boolean hasFocus) { // TODO Auto-generated method stub super.onWindowFocusChanged(hasFocus); ////有焦点的时候,让你的PopupWindow显示出来 if(hasFocus){ playerPopup.showAtLocation(mView, Gravity.TOP|Gravity.FILL, 0, 0); } }
?
?