2011-10-26 23 views
0

我已經做出了顯示確認對話框的邏輯,當用戶通過重寫backPressed方法按下按鈕時,但這意味着一個不尋常的行爲。如果顯示軟輸入鍵盤,則在後退鍵事件中必須隱藏,而其他後退鍵事件必須啓動確認對話框。有辦法做到這一點?也許通過檢測軟輸入鍵盤是否啓動並繞過確認對話框?如何處理壓縮(keyDown - 在以前的版本),以顯示退出應用程序的確認對話框?

下面是一個代碼示例來說明這一點:

public boolean onKeyUp(int keyCode, KeyEvent event) 
{ 
    if (keyCode == KeyEvent.KEYCODE_BACK) 
    { 
       //here is the mystery 
       if (soft keyboard is visible) 
       { 
        return super.onKeyUp(keyCode, event); 
       } else 
       { 
           //method which shows the close dialog and close the application 
        onBackPressed(); 
        return true; 
       } 
    } 
       return super.onKeyUp(keyCode, event); 
} 

回答

2

如果顯示軟鍵盤,我不認爲Activity可以收到返回鍵事件。默認行爲是回退鍵使軟鍵盤消失。

查看也可以阻塞按鍵事件,簡單的方法是setOnKeyListener。確保你的視圖是可以聚焦的,當它接收到關鍵事件時只返回true。

+0

是的,你說得對。一個真正的問題是,我已經overKey既onKeyDown和onKeyUp,並使雙重backPressed被稱爲。現在我只有onKeyDown overrided和軟鍵盤消耗事件。另一個奇怪的行爲已經遇到,那就是當一個新的後退鍵事件被捕獲時,onBackPressed被忽略。我必須處理它。謝謝你的好幫手。 –

1

代碼隱藏功能鍵墊:

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
    imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0); 

,你可以把這個代碼onBackKeyPressed無論鍵盤顯示或不

+0

謝謝你的回答。我真正的問題是,鍵盤消耗我的後退事件,然後關閉確認對話框顯示(相同的後退事件)。我真正想要的是隻有當屏幕沒有干擾(軟鍵盤,微調器下拉等等)時,纔會生成一個顯示確認對話框的邏輯。 –

相關問題