PopupWindow的使用注意

来源:互联网 发布:猎豹数据恢复电脑版 编辑:程序博客网 时间:2024/06/06 06:40

一、在Activity启动后立即弹出PopupWindow

若在Activity的onCreate()方法中直接写弹出PopupWindow方法会报错,因为activity没有完全启动是不能弹出PopupWindow的。

那我们只需要在activity完全启动后再弹出PopupWindow就行了。

第一种方法: 利用Activity的 onWindowFocusChanged()方法

[java] view plain copy
  1. @Override  
  2. public void onWindowFocusChanged(boolean hasFocus) {  
  3.     // TODO Auto-generated method stub  
  4.     super.onWindowFocusChanged(hasFocus);  
  5. if(hasFocus){
  6.     // 弹出PopupWindow的具体代码 

  7.  }
  8. }  

第二种方法: 利用Handler和Runnable

[java] 
  1. private Handler mHandler = new Handler();  
  2.   
  3. @Override  
  4. protected void onCreate(Bundle savedInstanceState) {  
  5.     // TODO Auto-generated method stub  
  6.     super.onCreate(savedInstanceState);  
  7.     setContentView(R.layout.main);  
  8.     mHandler.postDelayed(mRunnable, 500);  
  9. }  
  10.       
  11. private Runnable mRunnable = new Runnable() {  
  12.     public void run() {  
  13.     // 弹出PopupWindow的具体代码  
  14.     }  
  15. };  
二、点击外区域PopupWindow消失

方法一(这种方法可以处理popupwindows dimiss的时候一些其他的操作,比如让其他控件的隐藏,消失等):
代码如下popupWindow.setFocusable(false);//focusable要为false(不设置默认的就是False);
//这是Activity 的OnTouchEvent。OnTouchEvent代表的是Activity 获得事件(即为PopupWindow之外)
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
if (popupWindow != null && popupWindow.isShowing()) {
popupWindow.dismiss();
popupWindow = null;
}
return super.onTouchEvent(event);
}
方法二:设置popupWindow参数(这种方法只能让自身消失,不能够提供其他伴随操作,比如让其他控件的隐藏,消失等)
pop = new PopupWindow(view, ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
pop.setBackgroundDrawable(new BitmapDrawable());
pop.setOutsideTouchable(true);


1 0