studio reparar reparacion que programacion parpadea móviles luces fundido foco desarrollo curso como automovil arreglar aplicaciones android android-layout

android - reparar - ¿Cómo eliminar el foco sin configurar el foco a otro control?



programacion android pdf 2018 (8)

  1. Puede usar View.clearFocus() .

  2. Use View.requestFocus() invocado desde onResume() .

Me gusta que mis UI sean intuitivas; cada pantalla debe guiar de forma natural y discreta al usuario en el siguiente paso de la aplicación. Salvo eso, me esfuerzo por hacer que las cosas sean tan confusas y confusas como sea posible.

Es una broma :-)

Tengo tres TableRows, cada una conteniendo un control EditText de solo lectura y no enfocable y luego un botón a su derecha. Cada botón comienza la misma actividad pero con un argumento diferente. El usuario hace una selección allí y la subactividad termina, completando el EditText apropiado con la selección del usuario.

Es el mecanismo clásico de valores en cascada; cada selección reduce las opciones disponibles para la próxima selección, etc. Por lo tanto, deshabilitaré ambos controles en cada una de las siguientes filas hasta que EditText en la fila actual contenga un valor.

Necesito hacer una de estas dos cosas, en este orden de preferencia:

  1. Cuando se hace clic en un botón, retire inmediatamente el foco sin configurar el foco en un botón diferente
  2. Establezca el foco en el primer botón cuando comience la actividad

El problema se manifiesta después de que la subactividad vuelve; el botón en el que se hizo clic retiene el foco.

Re: # 1 arriba - No parece haber un método removeFocus (), o algo similar

Ref .: n. ° 2 anterior: puedo usar requestFocus () para establecer el foco en el botón de la fila siguiente, y eso funciona después de que la subactividad vuelva, pero por alguna razón no funciona en onCreate () de la actividad principal.

Necesito consistencia UI en cualquier dirección: o bien ningún botón tiene foco después de que finaliza la subactividad o cada botón recibe enfoque dependiendo de su lugar en el flujo lógico, incluido el primer (y único) botón activo antes de cualquier selección.


¿Qué tal si solo android:windowSoftInputMode="stateHidden" en tu actividad en el manifiesto.

Tomado de un hombre inteligente que comenta sobre esto: https://.com/a/2059394/956975


El uso de clearFocus () tampoco me funcionaba como lo encontraste (vi en los comentarios a otra respuesta), pero lo que funcionó para mí al final fue agregar:

<LinearLayout android:id="@+id/my_layout" android:focusable="true" android:focusableInTouchMode="true" ...>

a mi vista de diseño de nivel superior (un diseño lineal). Para eliminar el enfoque de todos los botones / EditTexts, etc., puede hacer

LinearLayout myLayout = (LinearLayout) activity.findViewById(R.id.my_layout); myLayout.requestFocus();

Solicitar foco no hizo nada a menos que configure la vista para que sea enfocable.


En primer lugar, funcionará al 100% ........

  1. Crear el método onResume() .
  2. Dentro de este onResume() encuentra la vista que se enfoca una y otra vez mediante findViewById() .
  3. Dentro de este onResume() establece requestFocus() a esta vista.
  4. Dentro de este onResume() establezca clearFocus en esta vista.
  5. Vaya en xml del mismo diseño y encuentre esa vista superior que desea enfocar y establecer focusable verdadera y focusableInTuch . Es muy cierta.
  6. Dentro de este onResume() encuentra la vista superior de arriba por findViewById
  7. Dentro de este onResume() establece requestFocus() a esta vista como último.
  8. Y ahora disfruta ......

Podría intentar desactivar la capacidad de la actividad principal para guardar su estado (lo que le haría olvidar qué control tenía texto y qué tenía foco). Tendrá que tener alguna otra forma de recordar lo que tiene su EditText y repoblarlos en Resume (). Inicie sus subactividades con startActivityForResult () y cree un controlador onActivityResult () en su actividad principal que actualizará correctamente el EditText. De esta forma, puede establecer el botón correcto que desea enfocar en Reanudar () al mismo tiempo que vuelve a llenar el texto de EditText mediante un myButton.post (nuevo Runnable () {run () {myButton.requestFocus ();}});

El método View.post () es útil para establecer el foco inicialmente porque ese ejecutable se ejecutará después de que se cree la ventana y las cosas se calmen, permitiendo que el mecanismo de enfoque funcione correctamente en ese momento. Tratar de establecer el foco durante onCreate / Start / Resume () generalmente tiene problemas, he encontrado.

Tenga en cuenta que esto es pseudocódigo y no probado, pero es una dirección posible que podría intentar.


Traté de desactivar y habilitar la capacidad de enfoque para ver y funcionó para mí (se reinició el enfoque):

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


Una vieja pregunta, pero la encontré cuando tuve un problema similar y pensé que compartiría lo que terminé haciendo.

La vista que ganó el foco fue diferente cada vez, así que utilicé la muy genérica:

View current = getCurrentFocus(); if (current != null) current.clearFocus();


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/ll_root_view" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> LinearLayout llRootView = findViewBindId(R.id.ll_root_view); llRootView.clearFocus();

Utilizo esto cuando ya terminé la información del perfil de actualización y eliminé todo el enfoque de EditText en mi diseño

====> Actualización: en el contenido de diseño principal, mi línea EditText agrega:

android:focusableInTouchMode="true"