Android: Force EditText para eliminar el enfoque?

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

19 Solutions collect form web for “Android: Force EditText para eliminar el enfoque?”

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

También puede cambiar el enfoque a otro elemento mediante programación.

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

Puede hacer que el cursor y el foco desaparezcan

 edittext.clearFocus(); 

Pero detecte cuando el ocultar de la placa clave es un trabajo duro.

Agregue LinearLayout antes de EditText en su XML.

 <LinearLayout android:focusable="true" android:focusableInTouchMode="true" android:layout_width="0px" android:layout_height="0px" /> 

O usted puede hacer esto mismo agregando estas líneas para ver antes de su 'EditText'.

 <Button android:id="@+id/btnSearch" android:layout_width="50dp" android:layout_height="50dp" android:focusable="true" android:focusableInTouchMode="true" android:gravity="center" android:text="Quick Search" android:textColor="#fff" android:textSize="13sp" android:textStyle="bold" /> <EditText android:id="@+id/edtSearch" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_marginRight="5dp" android:gravity="left" android:hint="Name" android:maxLines="1" android:singleLine="true" android:textColorHint="@color/blue" android:textSize="13sp" android:textStyle="bold" /> 

Quite el foco pero permanezca enfocable:

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

EditText perderá el foco, pero puede ganar de nuevo en un nuevo evento de toque.

Eliminar autofocus edittext android

Funciona para mi

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

 <View android:id="@+id/focus_thief" android:layout_width="1dp" android:layout_height="1dp" android:focusable="true" android:focusableInTouchMode="true" /> 

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

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 modo XML.

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

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

Agregue estas dos propiedades a su disposición principal (por ejemplo: Disposición lineal, Disposición relativa)

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

Lo hará el truco 🙂

Usted tiene que quitar <requestFocus/>

Si no lo usa y sigue teniendo el mismo problema

Usuario LinearLayout como padre y conjunto

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

Espero que te ayude.

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

 <View android:id="@+id/fucused" android:layout_width="wrap_content" android:layout_height="wrap_content" android:focusable="true" android:focusableInTouchMode="true"/> 

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

Hay pocas respuestas flotando alrededor de la SO, pero siento la necesidad de publicar mi solución completa causa esto me llevó nueces. He cogido pedazos de todo alrededor así que perdóname si no doy créditos respectivos a todos … 🙂

(Voy a simplificar mi resultado porque mi opinión tiene demasiados elementos y no quiero spam con eso y tratará de hacerlo lo más genérico posible …)

Para su diseño que necesita un padre de su EditText y vista de los padres definido algo como esto:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/lytContainer" android:descendantFocusability="beforeDescendants" android:focusableInTouchMode="true"> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/etEditor" android:inputType="number" android:layout_gravity="center" android:hint="@string/enter_your_text" android:textColor="@android:color/darker_gray" android:textSize="12dp" android:textAlignment="center" android:gravity="center" android:clickable="true"/> </LinearLayout> 

Así que necesitaba algunas cosas aquí. Necesitaba tener un marcador de posición para mi EditText – que es que –

Android: hint = "sugerencia"

También,

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

Hizo que sucediera para que EditText no se centrara en entrar en la actividad y más adelante en la actividad sí mismo cuando fijar esta configuración ayuda de modo que usted pueda fijar onTouchListener en él para robar el foco lejos 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 de bits que encontré en esta página de preguntas, y la parte con la solución de actividad que encontré en este blog . El resto me perdí lo que tuve que averiguar a mí mismo fue borrar el foco en el EditText que he añadido a ambos dentro de la setOnEditorActionListener y onTouchLister para la vista de los padres .

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

Saludos, Z.

Para ocultar el teclado cuando se inicia 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 enfoque y eliminar el cursor de edittext …..

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

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

También enfocando otra vista cortará una cierta cantidad de código. (Código para ocultar el teclado por ejemplo)

Agregue a su disposición principal donde puso su EditText este android:focusableInTouchMode="true"

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 diálogo extendido con un ScrollView que tenía un TableLayout con LinearLayout extendido que contenía un SeekBar y un EditText.

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

He intentado casi todas las soluciones de este hilo y ninguno funcionó para mí.

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 he utilizado ninguno de los fragmentos siguientes para resolverlo:

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

Y no he utilizado un artículo espaciador como una vista con ancho y altura de 1dp.

Esperemos 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 hace visible, el EditText no obtiene automáticamente el foco aunque es 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; } } }); 

Usted puede evitar cualquier foco en sus elementos fijando el atributo android: descendantFocusability del elemento del padre.

Aquí hay un ejemplo:

 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/search__scroller" android:descendantFocusability="blocksDescendants" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" > </ScrollView> 

Aquí, el atributo android: descendantFocusability definido como "blocksDescendants" está bloqueando el foco en los elementos secundarios.

Puede encontrar más información aquí .

 check your xml file <EditText android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="14sp" > **<requestFocus />** </EditText> //Remove **<requestFocus />** from xml 
  • Android: se centra en EditText después de la selección de Spinner
  • OnFocusChange no siempre funciona
  • Cómo borrar el enfoque de todos los elementos seleccionables en una vista?
  • Desplazamiento del foco de RecyclerView
  • El teclado androide no aparece en el enfoque de llamada en el campo de texto sencha
  • androide. Visualización de enfoque automático en el inicio de la actividad
  • EditText pierde foco cuando aparece el teclado; Requiere tocar dos veces para editar
  • Multiple EditText - especifica la ubicación del cursor
  • Detener ScrollView de establecer el enfoque en EditText
  • Deshabilitar temporalmente EditText
  • foco perdido después de notifyDataSetChanged ()
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.