2010-05-09 21 views
8

Estoy desarrollando en el Droid Incredible (y también lo he probado en un 1.5 AVD Emulator), y una de las pestañas en mi widget de pestañas consiste en una vista de lista y una fila con EditText y un Botón Enviar (para una función de chat). Estoy utilizando lo siguiente para cerrar el teclado virtual una vez que hago clic en Enviar, pero no está funcionando. Esto es idéntico al código que he encontrado en otro lugar que las personas han votado como correcto.Hide Soft Keyboard Not Working

¿Ves algo que me falta?

// in Button's onClick(): 
EditText chatTextBox = (EditText) findViewById(R.id.chat_entry); 
// Handle button click ... 
chatTextBox.setText(""); 

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.hideSoftInputFromWindow(chatTextBox.getWindowToken(), InputMethodManager.HIDE_IMPLICIT_ONLY); 

También intenté cambiar la bandera a 0. No tuve suerte. Alguien sabe qué pasa ??

**** EDIT **** Acabo de dar cuenta de que originalmente estaba usando hideSoftInputFromInputMethod() en lugar de hideSoftInputFromWindow(). Sin embargo, cambiarlo no lo hizo funcionar ...

Respuesta

20

Cambiando HIDE_IMPLICIT_ONLY a 0 lo hizo (después de que cambié a hideSoftInputFromWindow() desde hideSoftInputFromInputMethod()).

Sin embargo, no estoy seguro de por qué HIDE_IMPLICIT_ONLY no funciona, ya que no estoy abriendo explícitamente el teclado con una pulsación larga en Menú.

+0

Si va a mostrar el teclado con la bandera 'SHOW_FORCED'then que indica que el usuario ha forzado el método de entrada abierta (como por menú con una presión prolongada) por lo que no debe cerrarse hasta que lo hagan de forma explícita. [Consulte la documentación] (http://developer.android.com/reference/android/view/inputmethod/InputMethodManager.html#SHOW_FORCED) –

+0

Si tiene el teclado ** Forced ** mostrado y desea ocultarlo, utilice el siguiente código 'InputMethodManager imm = (InputMethodManager) mContext.getSystemService (Context.INPUT_METHOD_SERVICE); \t \t imm.hideSoftInputFromWindow (mEditText.getWindowToken(), 0); ' –

11

Otra opción para evitar que la actividad en AndroidManifest.xml presentar

androide: windowSoftInputMode = "stateAlwaysHidden" - Este método evitará que la carga/que muestra el teclado cuando se carga la actividad. Pero cuando haces clic en el componente editable como edittext, se abre el teclado. perfecto para mi requerimiento.

<activity 
      android:name=".Name" 
      android:label="@string/app_name" 
      android:windowSoftInputMode="stateAlwaysHidden"> 
+0

esto funciona cuando el teclado nunca se está muriendo de alguna manera. bueno uno – beginners

5

1. En primer lugar se unen tu edición símbolo de texto con el teclado y abierta
es decir inputMethodManager.showSoftInput(_edittext, 0); // aquí _edittext es ejemplo de vista

2.keyboard conseguirá oculta automáticamente si la edición de texto va oculto de la pantalla

3.edite el texto sigue en la pantalla, pero desea ocultar el teclado y luego utilice el siguiente código imm.hideSoftInputFromWindow(_edittext.getWindowToken(), 0); // t su voluntad no funcionará si edittext no está en la pantalla o no está enfocado.

+1

¡Esta es la mejor respuesta que he tenido! Explicado el misterio detrás de todos los teclados ocultos – ulusoyca