2013-06-26 213 views
3

我們創建了一個正在使用對話框的android庫。在我們使用Android 2.3.6的三星Galaxy S1 Plus I9005上進行測試後,長按設備菜單按鈕可立即關閉活動對話框。我甚至不知道長按那個按鈕的目的。 對於不知道設備的人來說,這張圖片應該會告訴你我的意思: Samsung Galaxy S1長按菜單按鈕關閉Android 2.3上的對話框

這個問題在Android 4.x上運行的設備上不會發生。我在運行Android 4.1.2的三星Galaxy S3上測試了它,甚至使用Android 4.0.3 Custom ROM測試了Galaxy S1 - 沒問題。

爲了抑制關閉對話框,我試圖重寫這似乎是相關的onKeyDownonKeyUponPrepareOptionsMenu等方法,但其中的非帶來的成功或任何有價值的信息。當我試圖調試到這些方法時,也發生了同樣的情況,因爲在調試器到達任何可以覆蓋的方法之前,對話框就消失了。

的對話是通過以下方式產生:

@Override 
public Dialog onCreateDialog(final int pId) { 
    Dialog dialog; 
    switch (pId) { 
     case LOADING_DIALOG: 
      dialog = DialogCreator.createLoadingDialog(MyActivity.this)); 
      break; 
     default: 
      dialog = null; 
    } 
    super.onCreateDialog(pId); 
    return dialog; 
} 

DialogCreator只是創建一個AlertDialog使用:

new AlertDialog.Builder(pContext).create(); 

爲了防止對話被取消,我說:

alertDialog.setCanceledOnTouchOutside(false); 
alertDialog.setCancelable(false); 

任何人都知道爲什麼這是關閉對話框?

編輯

雖然是在「桌面」的長按菜單按鈕啓動谷歌搜索。

+0

這是僅關閉對話框或沒有按菜單按鈕,您的應用程序崩潰? – Opiatefuchs

+0

只是關閉對話框 –

+0

用於捕獲長按菜單按鈕檢查[this](http://stackoverflow.com/questions/5222181/can-you-intercept-the-long-press-on-menu)。我試着用2.3.6設備,它似乎工作。 – anudroid

回答

3

@QQQestions的答案幫助我解決了這個問題。您應該使用OnKeyListener截取菜單按鈕長按事件。

編輯

if (keyCode == KeyEvent.KEYCODE_SEARCH && event.getRepeatCount() == 0) { 
return true; // Pretend we processed it 
} else if (keyCode == KeyEvent.KEYCODE_MENU && event.getRepeatCount() == 0) { 
return true; // Pretend we processed it 
} 
+0

@DanielVermaasen在不同的供應商可能有不同的鍵事件嘗試通過調試捕捉它們,然後在你的代碼中處理它們。 A有添加代碼來解答。 – Lemberg

+0

這樣做,非常感謝!這是KeyEvent.KEYCODE_MENU。 –

+0

我面臨同樣的問題,並通過您的代碼解決三星Galaxy Y的Android 2.3.6操作系統。 – Herry

相關問題