2013-07-15 31 views
4

我想在彈出窗口顯示時處理回按。在某些情況下,我想解僱它,在某些情況下,我不想在彈出窗口中執行某些任務。onBackPress當彈出窗口顯示時未調用

當顯示彈出窗口,活動onBackPress不會被調用。那麼如何在彈出窗口顯示時捕捉回按事件?

+0

[點擊這裏](http://stackoverflow.com/a/8606966/2345913)也閱讀它的評論 – CRUSADER

+0

設置背景繪製非空將永遠關閉彈出窗口。我有一些情況,我不想關閉彈出窗口,而是在彈出窗口中執行一些任務。那麼當彈出窗口可見時,有什麼方法可以捕獲回新聞事件。 –

回答

6

您需要在您的PopupWindow上致電setBackgroundDrawable(),並將背景設置爲非null。這聽起來很奇怪,但如果background沒有被設置的東西在你的PopupWindow那麼它將不能夠從Activity檢測等事件,觸摸窗口或後按下按鈕之外。

我有同樣的問題,只是前幾天。我會盡力找到答案,如果有人解釋爲什麼這是如此,但可能需要我一點點。同時,試試看它應該起作用。

Found it

我還沒有機會測試它,但你可以嘗試添加keyEventListener,做這樣的事情

public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    if (keyCode == KeyEvent.KEYCODE_BACK) 
    { 
     // put your code here 
    } 

,並添加setOutsideTouchable(true)PopupWindow對象,並對其調用update() 。如果這不起作用,那麼當彈出窗口顯示時,您可能不得不關閉後退按鈕,並將您自己的Button添加到窗口中。我還沒有發現任何可以讓你從後退按鈕中選擇事件的功能。

@Override 
public void onBackPressed() { 
    //your code 
} 
+0

將可繪製背景設置爲非null將始終關閉彈出窗口。我有一些情況,我不想關閉彈出窗口,而是在彈出窗口中執行一些任務。那麼當彈出窗口可見時,有什麼方法可以捕獲回新聞事件。 –

+0

我已經更新了一些東西來嘗試。我希望它有幫助,但我不確定當使用'PopUpWindow'時你想要做什麼 – codeMagic

3
final PopupWindow popup = new PopupWindow(context); 
... 
popup.setFocusable(false); //Setting this to true will prevent the events to reach activity below 
popup.setBackgroundDrawable(new BitmapDrawable()); //Or anything else, not null! 
在您的活動

然後可以幫助他人。 這樣做有

1)如果彈出窗口兩個重點選項不是重要的,你再設置

mPopupInfoWindow.setFocusable(false); 

因爲如果你的彈出窗口是焦點,那麼它不會傳回新聞發佈會的活動這就是爲什麼onBackPressed()方法不叫

2)如果彈出窗口焦點事宜中爲你再讓它真實,設置該監聽器在彈出的窗口。此代碼對我的作品

mPopupInfoWindow.getContentView().setFocusableInTouchMode(true); 
    mPopupInfoWindow.getContentView().setOnKeyListener(new View.OnKeyListener() { 
     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 

      if (keyCode == KeyEvent.KEYCODE_BACK) { 
       mPopupInfoWindow.dismiss(); 
       return true; 
      } 
      return false; 
     } 
    }); 
4

組後臺繪製這樣

popup.setBackgroundDrawable(new BitmapDrawable()); 

然後設置OnDismissListener這樣

popup.setOnDismissListener(new PopupWindow.OnDismissListener() { 
      @Override 
      public void onDismiss() { 
       //do your code here 
      } 
     }); 
0

我知道爲時已晚,但它:

相關問題