Une solution plus simple existe. Définissez ces attributs dans votre mise en page parent :
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainLayout"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true" >
Et maintenant, lorsque l'activité démarre, cette mise en page principale recevra le focus par défaut.
De plus, nous pouvons retirer le focus des vues enfant au moment de l'exécution (par exemple, après avoir terminé l'édition de l'enfant) en redonnant le focus à la disposition principale, comme ceci :
findViewById(R.id.mainLayout).requestFocus();
Bon commentaire de Guillaume Perrot :
android:descendantFocusability="beforeDescendants"
semble être la par défaut (la valeur entière est 0). Cela fonctionne simplement en ajoutant android:focusableInTouchMode="true"
.
Vraiment, on peut voir que le beforeDescendants
défini par défaut dans le ViewGroup.initViewGroup()
(Android 2.2.2). Mais pas égal à 0. ViewGroup.FOCUS_BEFORE_DESCENDANTS = 0x20000;
Merci à Guillaume.