Lorsque j'appuie sur «Suivant», le focus sur l'utilisateur EditText doit être déplacé vers le mot de passe. Ensuite, à partir du mot de passe, il doit aller à droite et ainsi de suite. Pouvez-vous m'aider sur la façon de le coder?
<LinearLayout
Android:id="@+id/LinearLayout01"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:orientation="horizontal" >
<TextView
Android:id="@+id/username"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="User Name*" />
<EditText
Android:id="@+id/txt_User"
Android:layout_width="290dp"
Android:layout_height="33dp"
Android:singleLine="true" />
</LinearLayout>
<LinearLayout
Android:id="@+id/LinearLayout02"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:orientation="horizontal" >
<TextView
Android:id="@+id/password"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Password*" />
<EditText
Android:id="@+id/txt_Password"
Android:layout_width="290dp"
Android:layout_height="33dp"
Android:singleLine="true"
Android:password="true" />
<TextView
Android:id="@+id/confirm"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Password*" />
<EditText
Android:id="@+id/txt_Confirm"
Android:layout_width="290dp"
Android:layout_height="33dp"
Android:singleLine="true"
Android:password="true" />
</LinearLayout>
Le mouvement de la mise au point est basé sur un algorithme qui trouve le plus proche voisin dans une direction donnée. Dans de rares cas, l'algorithme par défaut peut ne pas correspondre au comportement souhaité du développeur.
Changez le comportement par défaut de la navigation directionnelle en utilisant les attributs XML suivants:
Android:nextFocusDown="@+id/.."
Android:nextFocusLeft="@+id/.."
Android:nextFocusRight="@+id/.."
Android:nextFocusUp="@+id/.."
Outre la navigation directionnelle, vous pouvez utiliser la navigation par tabulation. Pour cela, vous devez utiliser
Android:nextFocusForward="@+id/.."
Pour obtenir une vue particulière, appelez le
view.requestFocus()
Pour écouter certains événements de focus changeants, utilisez un View.OnFocusChangeListener
Vous pouvez utiliser Android:imeOptions
pour gérer ce bouton supplémentaire sur votre clavier.
Fonctionnalités supplémentaires que vous pouvez activer dans un IME associé à un éditeur pour améliorer l'intégration avec votre application. Les constantes ici correspondent à celles définies par imeOptions.
Les constantes de imeOptions incluent diverses actions et drapeaux. Voir le lien ci-dessus pour connaître leurs valeurs.
Exemple de valeur
la touche action effectue une opération "suivante", amenant l'utilisateur vers le fichier champ suivant qui acceptera le texte.
la touche action effectue une opération "done", ce qui signifie généralement qu'il n'y a plus rien à entrer et que l'IME sera fermé.
Exemple de code:
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
tools:context=".MainActivity" >
<EditText
Android:id="@+id/editText1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentLeft="true"
Android:layout_alignParentTop="true"
Android:layout_marginLeft="32dp"
Android:layout_marginTop="16dp"
Android:imeOptions="actionNext"
Android:maxLines="1"
Android:ems="10" >
<requestFocus />
</EditText>
<EditText
Android:id="@+id/editText2"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignLeft="@+id/editText1"
Android:layout_below="@+id/editText1"
Android:layout_marginTop="24dp"
Android:imeOptions="actionDone"
Android:maxLines="1"
Android:ems="10" />
</RelativeLayout>
Si vous souhaitez écouter les événements imeoptions, utilisez un TextView.OnEditorActionListener
.
editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
performSearch();
return true;
}
return false;
}
});
Android:inputType="text"
devrait apporter le même effet. Après avoir cliqué sur suivant pour amener le focus sur l'élément suivant.
Android:nextFocusDown="@+id/.."
utilisez ceci dans addition si vous ne voulez pas que la vue suivante devienne active
ajoutez votre editText
Android:imeOptions="actionNext"
Android:singleLine="true"
ajouter une propriété à une activité dans le manifeste
Android:windowSoftInputMode="adjustResize|stateHidden"
dans le fichier de mise en forme ScrollView défini en tant que mise en page racine ou parent tous ui
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
tools:context="com.ukuya.marketplace.activity.SignInActivity">
<ScrollView
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<!--your items-->
</ScrollView>
</LinearLayout>
si vous ne voulez pas chaque fois qu'il ajoute, créez un style: ajoutez un style dans values / style.xml
style par défaut:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="editTextStyle">@style/AppTheme.CustomEditText</item>
</style>
<style name="AppTheme.CustomEditText" parent="Android:style/Widget.EditText">
//...
<item name="Android:imeOptions">actionNext</item>
<item name="Android:singleLine">true</item>
</style>
Utilisez la ligne suivante
Android:nextFocusDown="@+id/parentedit"
parentedit
est l'ID de la prochaine EditText
à cibler.
La ligne ci-dessus aura également besoin de la ligne suivante.
Android:inputType="text"
ou
Android:inputType="number"
Merci pour la suggestion @Alexei Khlebnikov.
Android:inputType="textNoSuggestions"
Android:imeOptions="actionNext"
Android:singleLine="true"
Android:nextFocusForward="@+id/.."
Ajout de champ supplémentaire
Android: inputType = "textNoSuggestions"
travaillé dans mon cas!
<AutoCompleteTextView
Android:id="@+id/email"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:drawableLeft="@drawable/user"
Android:hint="@string/username"
Android:inputType="text"
Android:maxLines="1"
Android:imeOptions="actionNext"
Android:singleLine="true" />
Ces trois lignes font la magie
Android:maxLines="1"
Android:imeOptions="actionNext"
Android:singleLine="true"
Dans votre gestionnaire onEditorAction, n'oubliez pas que vous devez renvoyer un booléen indiquant si vous gérez l'action (true) ou si vous avez appliqué une logique et souhaitez le comportement normal (false), comme dans l'exemple suivant:
EditText te = ...
te.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event){
if (actionId == EditorInfo.IME_ACTION_NEXT) {
// Some logic here.
return true; // Focus will do whatever you put in the logic.
}
return false; // Focus will change according to the actionId
}
});
J'ai trouvé cela quand je suis revenu vrai après avoir exécuté ma logique car le focus ne bougeait pas.
utilisez simplement le code suivant, cela fonctionnera correctement et utilisez inputType pour chaque texte édité et le bouton suivant apparaîtra sur le clavier.
Android:inputType="text" or Android:inputType="number" etc
Si vous souhaitez utiliser une EditText
multiligne avec imeOptions
, essayez:
Android:inputType="textImeMultiLine"
Dans certains cas, vous devrez peut-être déplacer manuellement le focus sur le champ suivant:
focusSearch(FOCUS_DOWN).requestFocus();
Vous en aurez peut-être besoin si, par exemple, un champ de texte ouvre un sélecteur de date par clic et que vous souhaitez que le focus passe automatiquement au champ de saisie suivant une fois la date sélectionnée par l'utilisateur et que ce dernier se ferme. Il n'y a aucun moyen de gérer cela en XML, cela doit être fait par programme.
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/ScrollView01"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fillViewport="true"
Android:scrollbars="vertical" >
<RelativeLayout
Android:layout_width="match_parent"
Android:layout_height="666dp"
Android:background="#1500FFe5"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin" >
<TextView
Android:id="@+id/TextView02"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_below="@+id/editGrWt"
Android:layout_marginTop="14dp"
Android:layout_toLeftOf="@+id/textView3"
Android:ems="6"
Android:text=" Diamond :"
Android:textColor="@color/background_material_dark"
Android:textSize="15sp" />
<EditText
Android:id="@+id/editDWt"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignBottom="@+id/TextView02"
Android:layout_alignLeft="@+id/editGrWt"
Android:background="@color/bright_foreground_inverse_material_light"
Android:ems="4"
Android:hint="Weight"
Android:inputType="numberDecimal"
Android:nextFocusLeft="@+id/editDRate"
Android:selectAllOnFocus="true"
Android:imeOptions="actionNext"
/>
<requestFocus />
<TextView
Android:id="@+id/TextView03"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignLeft="@+id/TextView02"
Android:layout_below="@+id/TextView02"
Android:layout_marginTop="14dp"
Android:ems="6"
Android:text=" Diamond :"
Android:textColor="@color/background_material_dark"
Android:textSize="15sp" />
<EditText
Android:id="@+id/editDWt1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignBaseline="@+id/TextView03"
Android:layout_alignBottom="@+id/TextView03"
Android:layout_alignLeft="@+id/editDWt"
Android:background="@color/bright_foreground_inverse_material_light"
Android:ems="4"
Android:hint="Weight"
Android:inputType="numberDecimal"
Android:text="0"
Android:selectAllOnFocus="true"
Android:imeOptions="actionNext"/>
<requestFocus />
<TextView
Android:id="@+id/TextView04"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_below="@+id/editDWt1"
Android:layout_marginTop="14dp"
Android:layout_toLeftOf="@+id/textView3"
Android:ems="6"
Android:text=" Stone :"
Android:textColor="@color/background_material_dark"
Android:textSize="15sp" />
<EditText
Android:id="@+id/editStWt1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignBaseline="@+id/TextView04"
Android:layout_alignBottom="@+id/TextView04"
Android:layout_alignLeft="@+id/editDWt1"
Android:background="@color/bright_foreground_inverse_material_light"
Android:ems="4"
Android:hint="Weight"
Android:inputType="numberDecimal"
Android:nextFocusForward="@+id/editStRate1"
Android:imeOptions="actionNext" />
<requestFocus />
<TextView
Android:id="@+id/TextView05"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignLeft="@+id/TextView04"
Android:layout_below="@+id/editStRate1"
Android:layout_marginTop="14dp"
Android:ems="6"
Android:text=" Stone :"
Android:textColor="@color/background_material_dark"
Android:textSize="15sp" />
</RelativeLayout>
</ScrollView>
Ajoutez inputType à edittext et entrez-le dans le prochain edittext
Android:inputType="text"
Android:inputType="textEmailAddress"
Android:inputType="textPassword"
et beaucoup plus.
inputType = textMultiLine ne va pas au prochain edittext lors de l'entrée
Manière simple, quand vous avez juste quelques champs un par un:
Besoin de définir
Android:maxLines="1"
Android:imeOptions="actionNext"
Android:inputType=""
<- Définissez votre type de texte, sinon ce sera Multiligne et empêchera de passer à la suite
échantillon:
<EditText Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:textSize="@dimen/text_large"
Android:maxLines="1"
Android:inputType="textEmailAddress"
Android:imeOptions="actionNext"
Android:layout_marginLeft="@dimen/element_margin_large"
Android:layout_marginRight="@dimen/element_margin_large"
Android:layout_marginTop="0dp"/>
Inside Edittext just arrange like this
<EditText
Android:id="@+id/editStWt1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:imeOptions="actionNext" //now its going to rightside/next field automatically
..........
.......
</EditText>