2011-03-16 74 views
1

我正在顯示textinput的對話框,並且想要在沒有硬鍵盤打開的情況下自動顯示軟鍵盤。爲了讓它顯示在我的Samsung Galaxy Tab上,我必須使用SHOW_FORCED標誌,SHOW_IMPLICIT標誌不起作用。另外,在對話解除時,如果我強制顯示,我想關閉鍵盤。但是,我在下面使用的代碼並未關閉Galaxy Tab上的鍵盤;我認爲這是因爲我使用Explicit標誌來顯示。Android:如何關閉明確顯示的軟鍵盤?

/* from the dialog constructor*/ 

    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
    imm.restartInput(mEditText); 

    //only display if there is no hard keyboard out 
    Configuration config = getResources().getConfiguration(); 
    if (config.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES) 
    { 
     mForcedKeyboardDisplay = true; 
     imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); 
    } 


    /* from the onDismiss() method*/ 

    //if we previously forced keyboard display, force it to close 
    if (mForcedKeyboardDisplay) 
    { 
     InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
     imm.restartInput(mEditText); 

     imm.hideSoftInputFromWindow(mEditText.getWindowToken(), InputMethodManager.HIDE_IMPLICIT_ONLY); 
     //this doesn't work either 
     //imm.hideSoftInputFromWindow(mEditText.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 
     //nor does this 
     //imm.hideSoftInputFromWindow(mEditText.getWindowToken(), 0); 
    } 
+0

我在華碩Transformer Pad上有類似的問題。我通過對hideSoftInputFromWindow使用連續的2個postDelayed調用(100ms和400ms)來解決此問題。 – 2012-06-29 15:19:06

回答

4

首先,不要使用toggleSoftInput()。這就是它名字所說的 - 切換IME的狀態。如果您確實需要它,請確保它已顯示,請使用showSoftInputFromWindow()

其次,沒有理由撥打restartInput()

使用0標誌調用showSoftInput()標誌正是您在點擊文本視圖以顯示IME時所執行的操作。其實這裏是代碼:https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/widget/TextView.java

如果您可以通過點擊文本視圖來顯示IME,但是您自己的呼叫不起作用,那麼您確實需要弄清楚爲什麼您的呼叫不起作用。我強烈建議不要使用SHOW_FORCED - 這有些特殊的行爲,我懷疑你想要。 (例如,如果用戶按回家,IME將保持打開狀態,通常不可取)

您呼叫隱藏IME不工作的最可能的原因是您的窗口在該點沒有輸入焦點如果是這種情況,您可能會在日誌中看到一條消息。事實上,一定要查看日誌,因爲出現問題時通常會打印消息。

+2

謝謝。我切換到showSoftInput(),但鍵盤仍然沒有顯示。我認爲這是因爲演出電話是在我的對話框構造函數中,可能後面跟着某種佈局命令,這是重新隱藏鍵盤。將調用移動到mEditText.post(...)解決了這個問題。 – ab11 2011-03-17 16:13:20