2012-12-04 57 views
23

showSoftInput()不會顯示我的鍵盤,但toggleSoftInput()呢。我看到一些其他帖子說,使用模擬器時禁用硬鍵盤,但我沒有使用模擬器。我在沒有硬鍵盤的實際設備上加載我的APK。這兩種方法不應該工作嗎?爲什麼不showSoftInput()工作?我想明確地將鍵盤與特定的文本字段相關聯。android softkeyboard showSoftInput vs toggleSoftInput

不起作用:

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
editText.setText("textchange"); //i see the text field update 
imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED); 

作品:

InputMethodManager imm = (InputMethodManager) getDelegate().getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0); 
+0

你想通了嗎?我已經在這個問題上花了3天時間了。如果我嘗試使用切換,鍵盤有時會隱藏,因爲它已經可見。當然Android並不認爲有必要讓我們能夠查詢softinput是否可見。 – bgolson

回答

1

試試這個:

public void showTheKeyboard(Context context, EditText editText){ 
    InputMethodManager imm = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE); 
    imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT); 
} 

如果這並不here

+1

我不得不切換。出於某種原因,showSoftInput不適用於我 – prostock

+0

這對我而言完全適用。謝謝! –

17

工作,請閱讀教程它似乎鍵盤已開始顯示出來,而是別的東西隱藏起來,因爲下面的工作(但實際上是一個骯髒的變通):

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
editText.postDelayed(new Runnable() 
{ 
    @Override 
    public void run() 
    { 
     editText.requestFocus(); 
     imm.showSoftInput(editText, 0); 
    } 
}, 100); 

而綜觀logcat的時候我懷疑這消息背後的原因最初隱藏鍵盤如下所示:

在開始輸入時隱藏剪貼板對話框:由其他人完成......!

+1

這實際上是我嘗試在onCreate中以編程方式顯示鍵盤時唯一有效的工具。我希望我知道爲什麼。謝謝。 –

+0

我有類似的問題。它解決了。謝謝 –

+0

好戲,謝謝。 – Lev

2

這個問題的確切答案爲什麼showSoftInput不工作,toggleSoftInput呢?

是你試圖顯示鍵盤的視圖沒有焦點。所以要解決這個問題,使用的方法showSoftInput你會調用下面對您的視圖方法:

setFocusable(true); 
    setFocusableInTouchMode(true); 

調用上面的方法將確保當你點擊查看保留和捕獲焦點。

+0

準確的答案應該至少顯示一個例子...因爲它不起作用! –

4

顯示鍵盤+重點,另外,如果你想隱藏鍵盤

@Override 
public void onResume() { 
    super.onResume(); 

    inputSearch.setFocusableInTouchMode(true); 
    inputSearch.requestFocus(); 

    // Show Keyboard 
    InputMethodManager imm = (InputMethodManager) getSherlockActivity().getSystemService(
      Context.INPUT_METHOD_SERVICE); 
    imm.showSoftInput(inputSearch, InputMethodManager.SHOW_IMPLICIT); 
} 

P.S inputSearch =(EditText上)getSherlockActivity()。findViewById(R.id。inputSearch);

// Hide Keyboard 
InputMethodManager imm = (InputMethodManager) getSherlockActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.hideSoftInputFromWindow(inputSearch.getWindowToken(), 0); 
1
public void hideKeyboard() { 
    myTextView.setFocusable(true); 
    myTextView.setFocusableInTouchMode(true); 
    imm.hideSoftInputFromWindow(myTextView.getWindowToken(), 0); 
} 

WORKS

public void hideKeyboard() { 
    imm.hideSoftInputFromWindow(myTextView.getWindowToken(), 0); 
} 

不起作用

imm處理早前因爲我使用的是片段這樣:

申報IMM的片段

private InputMethodManager imm; 
在片段添加

然後:

@Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    imm = (InputMethodManager) 
    getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
} 

他說,3到4個小時的研究和失敗後! !

謝謝user_CC! :-)

菲爾

+0

FWIW,在我確定它是第一個可用的代碼片段之前必須閱讀兩遍 - 如果在第一個片段中放置「WORKS:」並且「不工作:」在第二個片段之上,則會更清楚。 – ToolmakerSteve

0

ShowSoftInput工作如果IMM的目標視圖一樣的是EDITTEXT。 您可以通過imm.isActive(editText)editText.isInputMethodTarget()進行檢查。

ToggleSoftInput只是切換imm當前目標的鍵盤。

imm的目標視圖在焦點更改editText.requestFocus()後設置。我認爲這兩個任務之間存在一些後處理流程,因爲一個後臺運行不夠。我測試了雙柱,它爲我工作。

editText.requestFocus(); 
editText.post(new Runnable() { 
    @Override 
    public void run() { 
     editText.post(new Runnable() { 
      @Override 
      public void run() { 
       InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
       if (imm != null) { 
        imm.showSoftInput(editText, 0); 
       } 
      } 
     }); 
    } 
});