2012-05-11 18 views
5

Me gustaría saber la mejor manera de ocultar el teclado después de ingresar el texto a EditText.La mejor manera de ocultar el teclado en Android

1) setonfocuschangelistener: ¿Este oyente se dispara solo, cuando se presiona el botón de hecho o cuando el foco cambia de un EditText a otro? Cuando utilicé este método, no pude ocultar el teclado.

2) setOnTouchListener: Cuando usé esto, pude ocultar el teclado, pero dudo que pueda haber un problema con esto. En este caso, agrego el oyente táctil a la raíz LinearLayout. Siguiente código que había utilizado:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.login); 

    txtUserName = (EditText)findViewById(R.id.txtUserName); 
    btnLogin = (Button)findViewById(R.id.btnLogin); 
    layoutView = (LinearLayout)findViewById(R.id.li); 

    layoutView.setOnTouchListener(new OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) { 
      InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
      inputManager.hideSoftInputFromWindow(txtUserName 
        .getWindowToken(), 0); 
      return true; 
     } 
    }); 
} 

Dentro del LinearLayout principal, estoy usando otras dos LinearLayouts. El problema que enfrenté con el código anterior es que en algunos momentos cuando presioné, el teclado no se oculta. Mi duda es que estoy agregando el oyente táctil solo con el diseño de la raíz, sin dar al oyente táctil otros diseños internos u otros controles (TextView). Cuando toco otros controles o algunos puntos alrededor de TextView (es decir, diseños internos), el teclado no se oculta.

Eso significa que necesito agregar touchListener a todos los diseños o controles dentro del diseño raíz? ¿Cómo se puede manejar esta situación de una mejor manera?

+0

Gracias amigos por su respuesta. Podemos usar el código anterior para ocultar el teclado. El error que cometí es que en lugar de agregar el oyente táctil al diseño de la raíz, agregué el oyente táctil con uno de los diseños internos. Así que espero que este sea también el mejor método para ocultar el teclado, cuando tocamos fuera de EditText. Una vez más, gracias a todos por sus respuestas. Entonces, si algún usuario tiene el privilegio de marcar esto como una respuesta correcta, hágalo. Solo después de verificar el código. –

Respuesta

5

Prueba esto:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 

que puede ser utilizado para suprimir el teclado hasta que el usuario realmente tocó la vista EditarTexto.

O

inputManager.hideSoftInputFromWindow(editView.getWindowToken(), 0); 
+0

He intentado con esto también antes. Pero no funcionó. Mi duda es que necesito agregar cualquier otro código junto con el fragmento de código. Sería mejor si proporciona una pequeña explicación de cómo funciona en lugar de un código de línea. –

+0

intente esto después de que le explique –

+0

wow, funciona muy bien para mí, – umesh

14

Usted puede utilizar este código

InputMethodManager imm = 
    (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.hideSoftInputFromWindow(mEditView.getWindowToken(), 0); 
+3

Esto causará una excepción de puntero nulo si el teclado no se muestra. Por favor, agregue una solución a ese –

+1

@AjithMemana en realidad no dará ninguna excepción, lo he intentado y también he visto los documentos. Gracias –

+0

@Waseem ¿podría agregar el enlace a los documentos –

9

Mi respuesta a esta pregunta:

Añadir este método:

public static void hideSoftKeyboard(Activity activity) { 
    InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE); 
    inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0); 
} 

Si desea ocultar el teclado cuando se toca la pantalla, puede hacerlo de esta manera:

@Override 
public boolean onTouchEvent(MotionEvent event) { 
hideSoftKeyboard(LoginActivity.this); 
return false; 
} 

Hope esto le ayudará.

-1

La mejor manera de ocultar el teclado, solo dispatchDoneKey en su actividad. El teclado estará oculto si está en estado visible.

public void dispatchDoneKey() { 
    dispatchKeyEvent(new KeyEvent (KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK)); 
    dispatchKeyEvent(new KeyEvent (KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK)); 
} 
2

Un cheque simple para nula o una try-catch evita la NullPointerException cuando éste no está centrado.

public void hideKeyboard(Activity activity) { 
    InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); 
     if (activity.getCurrentFocus() != null) { 
      inputManager.hideSoftInputFromWindow(activity.getCurrentFocus() 
        .getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 
     } 
} 
Cuestiones relacionadas