2013-02-26 59 views
2

我目前正在開發一個具有3步驗證嚮導的應用程序。爲什麼InputMethodManager.isFullscreen()在應用程序旋轉後不可靠?

我需要知道用戶是否正在全屏編輯文本,以便我可以關閉鍵盤而不是繼續執行嚮導中的下一步。

我目前正面臨着一個令人討厭的問題,其中以下代碼在活動輪換後返回錯誤結果。

private boolean isFullscreenInputMode(EditText edit) { 
     InputMethodManager imm = (InputMethodManager)edit.getContext().getSystemService(Context.INPUT_METHOD_SERVICE ); 
     return imm.isFullscreenMode(); 
    } 

該代碼旨在檢測鍵盤是全屏模式還是ExtractEditText用於輸入。

如果我的應用程序在橫向模式下啓動,並且繼續執行整個3步向導,則此方法將返回true。如果我沿着停止工作的方式旋轉手機一次。

注意:該調用不是在onPause或onResume回調方法中執行的。正如我從其他帖子瞭解到的,這些情況可能會導致方法返回錯誤的值。

另外,是否有另一種方法來檢測鍵盤是否處於全屏模式?

在此先感謝!

編輯添加有關的EditText視圖中的「完成」按鈕editorActionListener代碼:

 edit.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
     @Override 
     public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
      if(actionId == EditorInfo.IME_ACTION_DONE && edit.getText().length() >= minKeys) { 

       if(!isFullscreenInputMode(edit)) { 
        performOkPress(edit, okButton, result); 
       } 
       else { 
        return false; 
       } 

       return true; 
      } 
      return false; 
     } 

     private void performOkPress(final EditText edit, final Button okButton, final ViewResult result) { 
      if(okButton.isEnabled()) { 
       okPressed(edit, okButton, result); 
      } 
     } 
    }); 
+0

當你旋轉屏幕時,這意味着你正在改變方向從縱向到橫向,反之亦然。 .....每次,你的onCreate被一次又一次地調用。這就是爲什麼你看到這些錯誤的結果。 – 2013-02-26 08:27:56

回答

0

當你旋轉屏幕,就意味着你正在改變,從縱向到橫向,反之亦然。 ......每次,你的onCreate被一次又一次地調用。這就是爲什麼你看到這些錯誤的結果。當你旋轉時,嘗試保存活動的狀態......希望它有幫助

+1

這會如何影響InputMethodManager在isFullscreen方法上返回的結果? – Nailer 2013-02-26 08:42:08

+0

尤其是因爲只有在觸發事件時才調用此代碼,並且不應使用任何保存的狀態。 – Nailer 2013-02-26 08:43:15

相關問題