2012-09-23 47 views
2

可能重複:
How to dismiss the dialog with click on outside of the dialog?點擊彈出之外予以駁回

我如何可以點擊彈出窗口以外辭退呢?

這裏是我的代碼:

cell.setOnClickListener(new OnClickListener(){ 

    /*This code is in a separate class so I needed to use ctx as context 
    *and the string "layout_inflater" because it was not recognizing 
    *LAYOUT_INFLATER_SERVICE*/ 

    @Override 
    public void onClick(View arg0) {LayoutInflater layoutInflater = 
    (LayoutInflater)ctx.getSystemService("layout_inflater"); 
    View popupView = layoutInflater.inflate(R.layout.popup_window, null); 
    final PopupWindow popupWindow = new PopupWindow(popupView, 
      LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    popupWindow.showAtLocation(newParentLayout, Gravity.CENTER, 0, 0); 
    } 

我也嘗試添加了這一切,但沒有結果。

popupWindow.setTouchable(true); 
popupWindow.setFocusable(true); 
popupWindow.setOutsideTouchable(true); 
Drawable bg = ctx.getResources().getDrawable(R.drawable.popup_bg); 
popupWindow.setBackgroundDrawable(bg); 

我不知道。任何幫助?

編輯添加:主佈局是一個ViewPager/PagerAdapter,如果這會影響任何東西?

+0

@ Eng.Fouad該解決方案是用於對話框,這是一個彈出窗口。 –

回答

10

請設置setOutsideTouchable(true)以及背景。這對我來說很好。我知道將背景drawable設置爲null會殺死OnTouchListener。

+0

@Marcin_S你能提供setbackgrounddrawable的代碼嗎?因爲我已經完成了上面的工作,但沒有成功。它在我看來,在其他stackoverflow答案中提供的解決方案使用不推薦的setBackgroundDrawable,我寧願學習正確的方式 –

+0

@Marcin_S發現我的錯誤,有showAtLocation之前設置外部可觸摸。這是正確的答案。謝謝! –

+0

不客氣。我很高興它適合你。 –

0

試試這種方式。

cell.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      LayoutInflater layoutInflater = 
       (LayoutInflater)ctx.getSystemService("layout_inflater"); 
       View popupView = layoutInflater.inflate(R.layout.popup_window, null); 
       final PopupWindow popupWindow = new PopupWindow(ctx); 

       popupWindow.setFocusable(true); 
       popupWindow.setContentView(popupView); 
       popupWindow.showAtLocation(b, Gravity.CENTER, 0, 0); 
       popupWindow.update(100, 100, 150, 150); 
     } 
    });