Existe una solución más simple. Establezca estos atributos en su diseño principal:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainLayout"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true" >
Y ahora, cuando comienza la actividad, este diseño principal se enfocará de manera predeterminada.
Además, podemos eliminar el foco de las vistas secundarias en tiempo de ejecución (por ejemplo, después de terminar la edición secundaria) volviendo a enfocar el diseño principal, de esta manera:
findViewById(R.id.mainLayout).requestFocus();
Buen comentario de Guillaume Perrot :
android:descendantFocusability="beforeDescendants"
parece ser el valor predeterminado (el valor entero es 0). Funciona solo agregando
android:focusableInTouchMode="true"
.
Realmente, podemos ver que el beforeDescendants
conjunto está predeterminado en el ViewGroup.initViewGroup()
método (Android 2.2.2). Pero no es igual a 0.ViewGroup.FOCUS_BEFORE_DESCENDANTS = 0x20000;
Gracias a Guillaume.
android:focusableInTouchMode="true"
!