Android: ¿Forzar EditText para eliminar el foco?

Me gustaría poder eliminar el foco de EditText. Por ejemplo, si aparece el teclado y el usuario lo oculta con el botón Atrás, me gustaría que el foco y el cursor desaparezcan. ¿Cómo puede hacerse esto?

Puede agregar esto a onCreate y ocultará el teclado cada vez que comience la actividad.

También podría cambiar programáticamente el foco a otro elemento.

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

Puedes hacer desaparecer el cursor y el foco

 edittext.clearFocus(); 

Pero detecta cuando el teclado se esconde es un trabajo duro.

Agregue LinearLayout antes de EditText en su XML.

  

O puede hacer lo mismo agregando estas líneas para ver antes de su ‘Editar Texto’.

   

Elimina el foco, pero permanece enfocable:

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

EditText perderá el foco, pero puede obtenerlo nuevamente en un nuevo evento táctil.

eliminar autofocus edittext android

Me está funcionando

Editar En el enlace, sugieren usar LinearLayout, pero la simple vista funcionará

  

Luego, si este “ladrón” se coloca en la parte superior del diseño (para ser el primer elemento clearFocus() ) las llamadas a clearFocus() funcionarán.

Agregue estas dos propiedades a su diseño principal (por ejemplo: diseño lineal, diseño relativo)

 android:focusable="true" android:focusableInTouchMode="true" 

Hará el truco 🙂

También puede incluir android: windowSoftInputMode = “stateAlwaysHidden” en su sección de acción de manifiesto.

Esto es equivalente a:

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

pero en forma XML.

FYI, también puedes ocultar el teclado con códigos:

 // hide virtual keyboard InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(mYourEditText.getWindowToken(), 0); 

tienes que eliminar

si no lo usa y sigue teniendo el mismo problema

usuario LinearLayout como padre y conjunto

 android:focusable="true" android:focusableInTouchMode="true" 

Espero que sea de ayuda.

Trate de usar este en su opinión, funcionó para mí:

  

Agregue a su diseño principal donde puso su EditText este android:focusableInTouchMode="true"

Para ocultar el teclado cuando comienza la actividad, escriba el siguiente código en onCreate () ..

 InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0); 

Para borrar el foco y quitar el cursor del texto de edición …..

 editText.clearFocus(); editText.setCursorVisible(false); 

Esta es mi primera respuesta en SO, así que no seas tan duro conmigo si hay errores. :RE

Hay pocas respuestas flotando alrededor del SO, pero siento la necesidad de publicar mi solución completa porque esto me volvió loco. He agarrado pedazos de todo, así que perdónenme si no les doy los créditos respectivos a todos … 🙂

(Simplificaré mi resultado porque mi vista tiene demasiados elementos y no quiero enviar spam con eso y trataré de hacerlo lo más genérico posible …)

Para su diseño necesita un padre, su EditText y la vista principal definieron algo como esto:

    

Entonces, necesitaba algunas cosas aquí. Necesitaba un Placeholder para mi EditText, que es eso,

android: hint = “pista”

También,

 android:descendantFocusability="beforeDescendants" android:focusableInTouchMode="true" 

hizo que ocurra que EditText no se concentre en ingresar a la Actividad y más adelante en la Actividad misma al configurarlo, esta configuración lo ayuda a que se pueda configurar en TouchListener para robar el foco de EditText .

Ahora, en la Actividad:

 package com.at.keyboardhide; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.view.WindowManager; import android.view.View.OnTouchListener; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.LinearLayout; public class MainActivity extends Activity implements OnTouchListener{ private EditText getEditText; private LinearLayout getLinearLayout; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); setContentView(R.layout.keyboardmain); getEditText = (EditText)findViewById(R.id.etEditor); getLinearLayout = (LinearLayout)findViewById(R.id.lytContainer); getLinearLayout.setOnTouchListener(this); getEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (actionId == EditorInfo.IME_ACTION_DONE) { Log.d("EDTA", "text was entered."); getEditText.clearFocus(); imm.hideSoftInputFromWindow(barcodeNo.getWindowToken(), 0); return true; } return false; } }); } @Override public boolean onTouch(View v, MotionEvent event) { if(v==getLinearLayout){ InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getEditText.getWindowToken(), 0); getEditText.clearFocus(); return true; } return false; } } 

Pocas de las respuestas para los bits que encontré en esta página de preguntas, y la parte con la solución de Actividad que encontré en este blog . El rest que echaba de menos, que tuve que resolver por mí mismo, fue aclarar mi enfoque en EditText, que agregué tanto dentro de setOnEditorActionListener como onTouchLister para la vista principal .

Espero que esto ayude a alguien y ahorre su tiempo. 🙂

Cheers, Z.

En los comentarios, preguntó si se puede enfocar otra vista en lugar de EditText. Sí puede. Utilice el método .requestFocus() para la vista que desea enfocar al principio (en el método onCreate ())

También enfocar otra vista reducirá cierta cantidad de código. (código para ocultar el teclado, por ejemplo)

También puede incluir android:windowSoftInputMode="stateAlwaysHidden" en su sección de acción de manifiesto.

Esto es equivalente a:

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

Yo tuve el mismo problema. Me hizo más que loco.

Tenía un cuadro de diálogo ampliado con un ScrollView que tenía un TableLayout con LinearLayout extendido que contenía una SeekBar y un EditText.

El primer EditText siempre tenía autofocus después de mostrar el cuadro de diálogo y después de terminar de editar el texto sobre el teclado, EditText aún tenía el foco y el teclado aún era visible.

Intenté casi todas las soluciones de este hilo y ninguna me funcionó.

Así que aquí mi solución simple : (text = EditText)

 text.setOnEditorActionListener( new OnEditorActionListener( ){ public boolean onEditorAction( TextView v, int actionId, KeyEvent event ){ if( (event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER) || (actionId == EditorInfo.IME_ACTION_DONE) ){ text.clearFocus( ); InputMethodManager iMgr = null; iMgr = (InputMethodManager)mContext.getSystemService( Context.INPUT_METHOD_SERVICE ); iMgr.hideSoftInputFromWindow( text.getWindowToken(), 0 ); } return true; } }); 

Por cierto , no usé ninguno de los siguientes fragmentos para resolverlo:

 //setFocusableInTouchMode( true ) //setFocusable( true ) //setDescendantFocusability( ViewGroup.FOCUS_BEFORE_DESCENDANTS ) 

Y no usé un elemento espaciador como una Vista con ancho y alto de 1dp.

Espero que ayude a alguien: D

 editText.setFocusableInTouchMode(true) 

El EditText podrá obtener el foco cuando el usuario lo toque. Cuando el diseño principal (actividad, diálogo, etc.) se vuelve visible, EditText no obtiene automáticamente el foco aunque sea la primera vista en el diseño.

 EditText.setOnKeyListener(new OnKeyListener() { public boolean onKey(View view, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_ENTER) { InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(URLText.getWindowToken(), 0); EditText.setFocusable(false); EditText.setFocusableInTouchMode(true); return true; } else { return false; } } }); 

Puede evitar cualquier enfoque en sus elementos estableciendo el atributo android: descenddentFocusability del elemento principal.

Aquí hay un ejemplo:

   

Aquí, el atributo android: descendantFocusability establecido en “blocksDescendants” bloquea el enfoque en los elementos secundarios.

Puedes encontrar más información aquí .

 check your xml file  ****  //Remove **** from xml