62 votes

Pouvez-vous définir "ordre de tabulation" dans la mise en page XML?

J'ai les utilisateurs de tablettes qui ont un onglet touche sur le clavier virtuel. Je suis l'aide d'une vue de la table et ont 3 EditText Champs dans une ligne avec EditText champs en dessous de la ligne actuelle.

Lorsque l'utilisateur clique sur l'onglet il n'en faut pour le prochain champ ci-dessous, pas le prochain champ à droite.

Est-il un moyen dans la mise en page pour définir l'ordre de tabulation ou est-il seulement fait par programmation?

Si elle ne peut être fait en Java, comment exactement est-il fait?

Merci pour l'astuce sur NextFocusRight mais il ne' semble pas fonctionner (ou j'ai fait quelque chose de mal)

Voici le code que j'ai utilisé. Je dois ajouter l'imeoptions pour obtenir le bouton "suivant" pour afficher dans mon émulateur. Voyez-vous quelque chose de mal avec la façon dont je l'ai fait?

    <EditText 
android:id="@+id/bikeHHT"
android:layout_width="50dip"
android:layout_height="40dip"
android:textSize="14px"
android:maxLength="2"
android:nextFocusLeft="@+id/bikeMMT"
android:imeOptions="actionNext"
android:layout_column="1"/>
<EditText 
android:id="@+id/bikeMMT"
android:layout_width="50dip"
android:layout_height="40dip"
android:textSize="14px"
android:nextFocusRight="@+id/bikeSST"
android:imeOptions="actionNext"
android:maxLength="2"/>

102voto

EricLarch Points 2353

Remplacez android:nextFocusLeft par android:nextFocusDown . Le bouton programmable "Suivant" ou la touche TAB recherche la mise au point "suivante" et non gauche ou droite.

38voto

Andrew Points 1675

Je remarque également que dans votre référence:

 android:nextFocusRight="@+id/bikeSST"
 

Le caractère "+" est requis si vous n'avez pas encore défini cet identifiant, si l'élément référencé est peut-être plus bas dans le fichier .xml.

Sinon vous, s'il est déjà défini ci-dessus (ou inclus), vous pouvez omettre le caractère "+":

 android:nextFocusRight="@id/bikeSST"
 

12voto

Jasper de Vries Points 3043

Pour moi, android:nextFocusUp , android:nextFocusRight , android:nextFocusDown et android:nextFocusLeft ne travaillaient pas, mais android:nextFocusForward travaillaient.

Voir Prise en charge de la navigation au clavier, Navigation des onglets .

10voto

Alain Pannetier Points 4488

Avez-vous vérifié l'attribut android:imeOptions="actionNext" pour EditText?

Il remplace le nom de la touche Entrée par "Suivant" dans le clavier virtuel et en cliquant dessus - le focus passe au champ suivant.

Dans votre mise en page, vous feriez des choses comme ça

 <EditText
    ...
    android:text="Field 1"
    android:imeOptions="actionNext" />
<EditText
    ...
    android:text="Field 2"
    android:imeOptions="actionNext" />
 

Et en Java

 TextView field2 = (TextView) field1.focusSearch(View.FOCUS_RIGHT);
field2.requestFocus();
 

C'est à vous de décider quel champ demandera le focus ensuite.

4voto

user432209 Points 7460

Il ya une meilleure façon. Il y a un XML argument que vous pouvez mettre dans votre mise en page qui se déplace automatiquement le curseur à travers chaque EditText comme l'utilisateur a terminé entre eux. Cela permet beaucoup plus facile formulaire de mise en œuvre.

Problème, c'est de la merde de la vie souvenir de ce que l'enfer c'est...

Soyez sûr de vérifier le android:nextFocus* propriétés xml. La forme normale de l'action est d'aller vers le bas. Mais peut-être il y a un bouton sur la droite que vous désirez recevoir le prochain objectif (comme appuyer sur la touche enter ou similaire).

http://developer.android.com/reference/android/view/View.html#attr_android:nextFocusDown

Il y a aussi quelques programatic options disponibles:

http://developer.android.com/reference/android/view/View.html#setNextFocusDownId(int)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X