J'aime que mes interfaces utilisateur soient intuitives ; chaque écran doit guider naturellement et discrètement l'utilisateur vers l'étape suivante de l'application. À défaut, je m'efforce de rendre les choses aussi confuses et déroutantes que possible.
Je plaisante :-)
J'ai trois TableRow
contenant chacune un contrôle EditText en lecture seule et non focalisable, puis un bouton à sa droite. Chaque bouton lance la même activité, mais avec un argument différent. L'utilisateur y effectue une sélection et la sous-activité se termine en remplissant le champ EditText
avec la sélection de l'utilisateur.
Il s'agit du mécanisme classique de valeurs en cascade ; chaque sélection réduit les options disponibles pour la sélection suivante, etc. Je désactive donc les deux contrôles sur chacune des lignes suivantes jusqu'à ce que l'EditText de la ligne actuelle contienne une valeur.
Je dois faire l'une des deux choses suivantes, par ordre de préférence :
- Lorsqu'un bouton est cliqué, retirer immédiatement le focus sans le placer sur un autre bouton.
- Mettre l'accent sur le premier bouton au début de l'activité
Le problème se manifeste après le retour de la sous-activité ; le bouton sur lequel on a cliqué conserve le focus.
Re : #N° 1 ci-dessus - Il ne semble pas y avoir d'outil d'évaluation des risques. removeFocus()
ou quelque chose de similaire
Re : #2 ci-dessus - Je peux utiliser requestFocus()
pour mettre le focus sur le bouton de la ligne suivante, et cela fonctionne après le retour de la sous-activité, mais pour une raison quelconque, cela ne fonctionne pas dans la fenêtre de l'activité parent. onCreate()
.
J'ai besoin d'une cohérence de l'interface utilisateur dans les deux sens : soit aucun bouton n'a le focus après la fin de la sous-activité, soit chaque bouton reçoit le focus en fonction de sa place dans le flux logique, y compris le tout premier (et le seul) bouton actif avant toute sélection.