Déplacer vers un autre EditText lorsque vous cliquez sur le clavier logiciel suivant sur Android
Lorsque j'appuie sur le 'suivant', le focus sur L'utilisateur EditText doit être déplacé vers le mot de passe. Ensuite, à partir du mot de passe, il doit se déplacer vers la droite et ainsi de suite. Pouvez-vous m'aider sur la façon de 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>
13 réponses
Gestion De La Mise Au Point
Le mouvement de 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 prévu du développeur.
Modifier 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 onglets. Pour cela, vous devez utiliser
android:nextFocusForward="@+id/.."
Pour obtenir une vue particulière pour prendre le focus, appelez
view.requestFocus()
Pour écouter certains changement d'orientation des événements de l'utilisation d'un View.OnFocusChangeListener
Bouton du clavier
Vous pouvez utiliser android:imeOptions
pour la manutention 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 correspond à ceux définis par imeOptions.
Les constantes d'imeOptions comprennent une variété de actions et drapeaux, voir le lien ci-dessus pour leurs valeurs.
Exemple de Valeur
La touche action effectue une opération "next", amenant l'utilisateur vers le champ suivant qui acceptera le texte.
La clé d'action effectue une opération" done", ce qui signifie généralement qu'il n'y a plus rien à saisir et que L'IME sera fermé.
Code exemple:
<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 voulez é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 hiting à côté d'apporter la mise au point à l'élément suivant.
android:nextFocusDown="@+id/.."
Utilisez ceci dans addition Si vous ne voulez pas que la vue suivante obtienne le focus
Ajouter votre editText
android:imeOptions="actionNext"
android:singleLine="true"
Ajouter la propriété à l'activité dans le manifeste
android:windowSoftInputMode="adjustResize|stateHidden"
Dans le fichier de mise en page ScrollView définir en tant que mise en page racine ou parent toute l'interface utilisateur
<?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éer du style: ajouter du style dans les valeurs / style.xml
Par défaut / style:
<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 du prochain EditText
à focaliser.
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 d'un champ supplémentaire
Android: inputType= "textNoSuggestions"
Travaillé dans mon cas!
Dans votre gestionnaire onEditorAction, gardez à l'esprit que vous devez renvoyer un booléen qui indique si vous gérez l'action (true) ou si vous avez appliqué une logique et que vous voulez 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 effectué ma logique puisque le focus ne bougeait pas.
<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"
Il suffit d'utiliser le code suivant, il fonctionnera bien et utiliser inputType pour chaque edittext et le bouton Suivant apparaîtra dans le clavier.
android:inputType="text" or android:inputType="number" etc
<?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>
Si vous souhaitez utiliser un multi - EditText
avec imeOptions
, essayez:
android:inputType="textImeMultiLine"
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>
Ajouter inputType à edittext et en entrée, il ira le prochain edittext
android:inputType="text"
android:inputType="textEmailAddress"
android:inputType="textPassword"
Et beaucoup plus.
InputType = textMultiLine ne passe pas au prochain edittext en entrée
Dans certains cas, vous devrez peut-être déplacer manuellement le focus sur le champ suivant:
focusSearch(FOCUS_DOWN).requestFocus();
Vous pouvez en avoir besoin si, par exemple, vous disposez d'un champ de texte qui ouvre un sélecteur de date au clic et que vous souhaitez que le focus passe automatiquement au champ de saisie suivant une fois qu'une date est sélectionnée par l'utilisateur et que le sélecteur se ferme. Il n'y a aucun moyen de gérer cela en XML, cela doit être fait par programme.