web-dev-qa-db-fra.com

Déplacer vers un autre EditText lorsque vous cliquez sur le clavier, puis sur Android

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?

enter image description here

<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>
176
androidBoomer

Mise au point de la manipulation

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


Bouton du clavier

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

ActionNext

la touche action effectue une opération "suivante", amenant l'utilisateur vers le fichier champ suivant qui acceptera le texte.

ActionDone :

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;
    }
});

405
Tobrun
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 

58
Matthias H

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>
22
Abror Esonaliyev

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.

14
Spring Breaker
Android:inputType="textNoSuggestions"
Android:imeOptions="actionNext"
Android:singleLine="true"
Android:nextFocusForward="@+id/.."

Ajout de champ supplémentaire 

Android: inputType = "textNoSuggestions"

travaillé dans mon cas!

8
Tripathee Gaurav
<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"
6
Hitesh Kushwah

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.

6
user3701500

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
2
pawan kumar

Si vous souhaitez utiliser une EditText multiligne avec imeOptions, essayez: 

Android:inputType="textImeMultiLine"
1
Chris

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.

1
flawyte
<?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>
1
Nilkanth vithani

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

1
Sharmad Desai

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"/>
0
PsyhoLord
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>
0
Kishore Reddy