2014-12-20 66 views
1

需要打開連接到一個視圖的鍵盤並將關鍵事件委託給edittext,但是當焦點集中時,不需要將鍵盤附加到EditText。我試着用這個代碼:如何禁用EditText專注時顯示的鍵盤?

清單中

<activity android:windowSoftInputMode="adjustPan|stateAlwaysHidden" /> 

代碼:

InputMethodManager inputMethodManager = (InputMethodManager) rootView.getContext() 
            .getSystemService(Context.INPUT_METHOD_SERVICE); 
inputMethodManager.showSoftInput(view, InputMethodManager.SHOW_FORCED); 

view.setOnKeyListener(new View.OnKeyListener() { 
    @Override 
    public boolean onKey(View view, int keycode, KeyEvent keyEvent) { 
     switch (keyEvent.getAction()){ 
      case KeyEvent.ACTION_UP: 
       editText.onKeyUp(keycode, keyEvent); 
       break; 
      case KeyEvent.ACTION_DOWN: 
       editText.onKeyDown(keycode, keyEvent); 
       break; 
     } 
     return true; 
    } 
}); 

一切是怎麼回事OK(鍵盤顯示),但是當EditText上獲得焦點 - 所有邏輯被破壞(在edittext上重新顯示keybord);

editext.requestFocus(); 

重點在編輯文本需要處理選擇和其他事情取決於焦點。

任何幫助對我很重要,謝謝;

UPDATE: 沒有必要隱藏鍵盤,所需步驟:

  1. 鍵盤打開並附加一些視圖
  2. 編輯文本獲得焦點,但鍵盤不atached它

回答

2

如果這是您正在使用的活動,則可以使用清單中的以下行來隱藏創建時的鍵盤。

 <activity 
     android:name=".YourActivityName" 
     android:windowSoftInputMode="stateHidden"></activity> 
0

創建一個函數:

/* Hides keyboard, if diaplayed */ 
public void hideKeyboard(){ 
    View currentFocus = MainAcitivty.this.getCurrentFocus(); // Change the name according to your activity's name. 
    InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(MainActivity.this.INPUT_METHOD_SERVICE); 
    if(currentFocus != null){ 
     inputMethodManager.hideSoftInputFromWindow(currentFocus.getWindowToken(),0); 
     currentFocus.clearFocus(); 
    } 
} 

,並呼籲從任何你想隱藏鍵盤上面的功能。

希望這有助於...