248 votes

Déplacement vers un autre EditText lorsque l'on clique sur Soft Keyboard Next sur Android

Lorsque je clique sur 'Suivant', le focus sur le texte d'édition de l'utilisateur doit être déplacé vers le mot de passe. Puis, à partir du mot de passe, il doit se déplacer vers la droite et ainsi de suite. Pouvez-vous m'aider à coder cela ?

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>

523voto

user1281750 Points 2636

Manipulation de la mise au point

Le mouvement de mise au point est basé sur un algorithme qui trouve le plus proche voisin le plus proche dans une direction donnée. Dans de rares cas, l'algorithme par défaut peut ne pas correspondre au comportement souhaité par le développeur.

Modifiez 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 qu'une vue particulière prenne le focus, appelez

view.requestFocus()

Pour écouter certains événements de changement de focalisation, utilisez un View.OnFocusChangeListener


Bouton du clavier

Vous pouvez utiliser android:imeOptions pour gérer ce bouton supplémentaire sur votre clavier.

Fonctions 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 comprennent une variété d'actions et de drapeaux, voir le lien ci-dessus pour leurs valeurs.

Exemple de valeur

ActionNext :

la touche d'action exécute une opération "suivante", amenant l'utilisateur au champ suivant qui accepte du texte.

ActionDone :

la touche d'action exécute une opération "terminée", ce qui signifie généralement qu'il n'y a plus rien à saisir et que l'EMI sera fermée.

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 voulez écouter les événements d'imeoptions, utilisez un fichier 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;
    }
});

39voto

Abror Esonaliyev Points 987

ajoutez votre editText

android:imeOptions="actionNext"
android:singleLine="true"

ajouter une propriété à l'activité dans le manifeste

    android:windowSoftInputMode="adjustResize|stateHidden"

dans le fichier de mise en page, ScrollView est défini comme racine ou parent de la mise en page pour toutes les interfaces 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 s'ajoute, créer du style : ajouter un style dans values/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>

24voto

Spring Breaker Points 3194

Utilisez la ligne suivante

android:nextFocusDown="@+id/parentedit"

parentedit est l'ID du prochain EditText de se concentrer.

La ligne ci-dessus aura également besoin de la ligne suivante.

android:inputType="text"

ou

android:inputType="number"

Merci pour la suggestion @Alexei Khlebnikov.

13voto

Tripathee Gaurav Points 166
android:inputType="textNoSuggestions"
android:imeOptions="actionNext"
android:singleLine="true"
android:nextFocusForward="@+id/.."

Ajout d'un champ supplémentaire

Android:inputType="textNoSuggestions" (en anglais)

a fonctionné dans mon cas !

9voto

user3701500 Points 91

Dans votre gestionnaire onEditorAction, gardez à l'esprit que vous devez renvoyer un booléen qui indique si vous traitez l'action (true) ou si vous avez appliqué une certaine 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 lorsque j'ai retourné vrai après avoir exécuté ma logique puisque le focus n'a pas bougé.

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