Cómo ocultar el teclado suave de Android en EditText

Tengo una Actividad con algunos campos EditText y algunos botones como una conveniencia para lo que normalmente se usaría para poblar esos campos. Sin embargo, cuando el usuario toca uno de los campos EditText aparece automáticamente el teclado virtual de Android. Quiero que permanezca oculto por defecto, a menos que el usuario presione el botón de menú durante mucho tiempo. Busqué una solución para esto y encontré varias respuestas, pero hasta ahora no puedo hacer que funcionen.

He probado lo siguiente:

1 – En el método onCreate,

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

2 – También en el método onCreate,

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

3 – y fIn el archivo Manifest,

  

Ninguno de estos métodos funciona. Cada vez que el usuario hace clic en el campo EditText, aparece el teclado virtual. Solo quiero que aparezca el teclado virtual si el usuario lo muestra de forma explícita presionando prolongadamente la tecla de menú.

¿Por qué no está funcionando?

Esto te ayudara

 editText.setInputType(InputType.TYPE_NULL); 

Editar:

Para mostrar el teclado virtual, debe escribir el siguiente código en el long key press event of menu button

 editText.setInputType(InputType.TYPE_CLASS_TEXT); editText.requestFocus(); InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); mgr.showSoftInput(editText, InputMethodManager.SHOW_FORCED); 

necesitas agregar en manifiesto Su archivo de manifiesto se vería así:

  

A veces uso un truco para hacer exactamente eso. Puse un soporte de foco invisible en algún lugar en la parte superior del diseño. Sería por ejemplo así

   

con este estilo

  

y luego en “Resumir” llamaría

  editInvisibleFocusHolder.setInputType(InputType.TYPE_NULL); editInvisibleFocusHolder.requestFocus(); 

Eso funciona bien para mí desde 1.6 hasta 4.x

Después de mucho tiempo buscando en la clase TextView, encontré una forma de evitar que aparezca el teclado. El truco es esconderlo justo después de que aparezca, por lo que busqué un método que se llama después de que aparezca el teclado y lo oculté.

Implementé la clase EditText

 public class NoImeEditText extends EditText { public NoImeEditText(Context context, AttributeSet attrs) { super(context, attrs); } /** * This method is called before keyboard appears when text is selected. * So just hide the keyboard * @return */ @Override public boolean onCheckIsTextEditor() { hideKeyboard(); return super.onCheckIsTextEditor(); } /** * This methdod is called when text selection is changed, so hide keyboard to prevent it to appear * @param selStart * @param selEnd */ @Override protected void onSelectionChanged(int selStart, int selEnd) { super.onSelectionChanged(selStart, selEnd); hideKeyboard(); } private void hideKeyboard(){ InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getWindowToken(), 0); } } 

y estilo

  

El teclado EditorInfo.TYPE_NULL siguió aumentando a pesar de que establecí EditorInfo.TYPE_NULL en la vista. Ninguna de las respuestas funcionó para mí, excepto la idea que obtuve de la respuesta de nik431:

 editText.setCursorVisible(false); editText.setFocusableInTouchMode(false); editText.setFocusable(false); 

La siguiente línea es exactamente lo que se está buscando. Este método se ha incluido con API 21 , por lo tanto, funciona para API 21 y superior.

 edittext.setShowSoftInputOnFocus(false); 

Parece que hay una gran variedad de formas de evitar que aparezca el teclado del sistema, tanto de forma programática como en xml. Sin embargo, esta es la manera que me ha funcionado a la vez que he soportado dispositivos pre API 11.

 // prevent system keyboard from appearing if (android.os.Build.VERSION.SDK_INT >= 11) { editText.setRawInputType(InputType.TYPE_CLASS_TEXT); editText.setTextIsSelectable(true); } else { editText.setRawInputType(InputType.TYPE_NULL); editText.setFocusable(true); } 

Intentemos establecer las siguientes propiedades en su xml para EditText

 android:focusableInTouchMode="true" android:cursorVisible="false". 

si desea ocultar el teclado de progtwigción en la actividad de inicio, vaya a este enlace

 weekText = (EditText) layout.findViewById(R.id.weekEditText); weekText.setInputType(InputType.TYPE_NULL); 

Tres formas basadas en la misma instrucción simple:

un). Resultados tan fáciles como localizar (1):

 android:focusableInTouchMode="true" 

entre la configuración de cualquier elemento precedente en el diseño, ejemplo:

si todo tu diseño está compuesto de:

     

a continuación, puede escribir el (1) entre los parámetros de ImageView y esto atraerá la atención de Android a ImageView en lugar de EditText.

segundo). En caso de que tenga otro elemento precedente que un ImageView, puede que necesite agregar (2) a (1) como:

 android:focusable="true" 

do). también puedes simplemente crear un elemento vacío en la parte superior de tus elementos de vista:

  

Esta alternativa hasta este punto resulta ser la más simple de todas que he visto. Espero eso ayude…

Ocultar el teclado

 editText.setInputType(InputType.TYPE_NULL); 

Mostrar teclado

 etData.setInputType(InputType.TYPE_CLASS_TEXT); etData.setFocusableInTouchMode(true); 

en el diseño principal

 android:focusable="false" 

El resultado de mi prueba:

con: editText.setInputType (InputType.TYPE_NULL);

el teclado desaparecerá, pero el cursor también desaparecerá.

con: editText.setShowSoftInputOnFocus (falso)

Funciona como se esperaba.

Simplemente use EditText.setFocusable(false); en actividad

o usar en xml

 android:focusable="false"