PopupWindow是不能直接showAtLocation()的,直接显示的话会报错误
事实证明:popupwindow出现是很麻烦的,要符合好几个条件
1.要有触发源,比如按键监听器啦,gesture监听器啦,这里参考别人代码,用idle的loop循环作为监听器,这个选择8错,因为视频播放器不可能让用户按键后出现视频控制按键
2.popupwindow的showatlocation和update都要调用?,看源码showatlocation只是指明了popupwindow到底要在哪里显示,update的源码没看太明白,估计是控制显示吧,不知道android下层怎么控制的
3.对于里面有组件的popupwindow来说,findviewbyid一定要慎重,要指明popupwindow所在的view
4.对于希望满屏显示的,可以使用DisplayMetrics dm=new DisplayMetrics();
popupwindow.update(0,0,dm.widthPixels,dm.heightPixels);
还有一个关键的问题。弹出pop之后,back键无效了,必须在pop里面设置事件dismiss掉。
网上也有很多人说,弹出pop之后,不响应键盘事件了,这个其实是焦点在pop里面的view去了。
在pop的view加上 setOnKeyListener,就能解决。
- popView.setOnKeyListener(new OnKeyListener() {
- @Override
- public boolean onKey(View v, int keyCode, KeyEvent event) {
- switch (keyCode) {
- case KeyEvent.KEYCODE_MENU:
- if (popupWindow != null && popupWindow.isShowing()) {
- popupWindow.dismiss();
- System.out.println("menuGridfdsfdsfdfd");
- }
- break;
- }
-
- return true;
- }
- });