android PopupWindow触发条件

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,就能解决。

  1. popView.setOnKeyListener(new OnKeyListener() {
  2.             @Override
  3.             public boolean onKey(View v, int keyCode, KeyEvent event) {
  4.                 switch (keyCode) {
  5.                 case KeyEvent.KEYCODE_MENU:
  6.                     if (popupWindow != null && popupWindow.isShowing()) {
  7.                         popupWindow.dismiss();
  8.                         System.out.println("menuGridfdsfdsfdfd");
  9.                     }
  10.                     break;
  11.                 }
  12.             
  13.                 return true;
  14.             }
  15.         });

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值