web-dev-qa-db-fra.com

KeyCode_Enter to next edittext

Dans edittext, après avoir tapé la touche "Entrée", le système crée une nouvelle ligne à l'intérieur. Je voudrais me concentrer sur le prochain edittext, pas de nouvelle ligne. comment coder? mon code en xml est ci-dessous

    <EditText
    Android:id="@+id/txtNPCode"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:textSize="18sp"
    Android:layout_alignLeft="@+id/lblNPCode"
    Android:layout_below="@+id/lblNPCode"
    Android:layout_centerHorizontal="true"/>
<EditText
    Android:id="@+id/txtCNPCode"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:textSize="18sp"
    Android:layout_alignLeft="@+id/lblCNPCode"
    Android:layout_below="@+id/lblCNPCode"
    Android:layout_centerHorizontal="true"/>  

Je sais aussi le code clé de caputer dans setOnKeyListener

   tCNPCode.setOnKeyListener(new OnKeyListener() {
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            // TODO Auto-generated method stub
            if(keyCode == 66) {
                Toast.makeText(S_PCode.this, "Enter Key", Toast.LENGTH_LONG).show();
                //tNPCode.setFocusable(true);
            }
            return false;
        }
    });
27
soclose

Vous devez utiliser la méthode requestFocus . Dans votre cas, ce sera quelque chose comme:

tCNPCode.setOnKeyListener(new OnKeyListener() {
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if(keyCode == 66) {
            txtCNPCode.requestFocus();
        }
        return false;
    }
});
14
Cristian

Vous n'avez même pas besoin d'utiliser OnKeyListener. Ajoutez simplement la ligne Android:singleLine="true" à votre EditText. Après cette opération, EditText se comporte exactement comme vous le souhaitez. Donc, dans votre cas particulier:

<EditText
    Android:id="@+id/txtNPCode"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:textSize="18sp"
    Android:layout_alignLeft="@+id/lblNPCode"
    Android:layout_below="@+id/lblNPCode"
    Android:layout_centerHorizontal="true"
    Android:singleLine="true"
/>
<EditText
    Android:id="@+id/txtCNPCode"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:textSize="18sp"
    Android:layout_alignLeft="@+id/lblCNPCode"
    Android:layout_below="@+id/lblCNPCode"
    Android:layout_centerHorizontal="true"
/>

résout le problème.

36
Antek

La meilleure façon consiste à utiliser l'une des options pour inputType, par exemple: Android:inputType="textPersonName" Cela permettra d'obtenir l'effet recherché. Découvrez également les autres options, cela vous fera gagner du temps à l'avenir :)

Vous ne devez pas utiliser Android: singleLine = "true", car il est obsolète. Voici ce qu'en disent les documentations:

Cet attribut est obsolète et est remplacé par l'indicateur textMultiLine dans l'attribut inputType. Soyez prudent lorsque vous modifiez des dispositions existantes, car la valeur par défaut de singeLine est false (mode multi-lignes), mais si vous spécifiez une valeur pour inputType, la valeur par défaut est le mode mono-ligne. (Si des attributs singleLine et inputType sont trouvés, les indicateurs inputType remplaceront la valeur de singleLine.).

10
Stan

Considérez les options IME, bonne description ici http://androidcookbook.com/Recipe.seam;jsessionid=C824437B48F346E23FBE5828969029B4?recipeId=422 et documentation ici http://developer.Android.com/ reference/Android/widget/TextView.html # attr_Android: imeOptions .

La seule chose dont vous avez besoin est d'ajouter l'attribut Android: imeOptions = "actionNext" sur chaque EditText. Le clavier apparaît avec une touche Suivant où était Enter et permet de naviguer vers le prochain EditText.

Mais l'ordre "actionNext" est de haut en bas. Par exemple, si vous avez une disposition horizontale:

<LinearLayout Android:orientation="horizontal" >
        <EditText Android:id="@+id/et1" Android:imeOptions="actionNext" />
        <EditText Android:id="@+id/et2" Android:imeOptions="actionNext" />
</LinearLayout>

et2 ne se concentre jamais. Vous devez le corriger dans le code:

et1.setOnEditorActionListener(new OnEditorActionListener()
{
    @Override
    public boolean onEditorAction(TextView v, int actionId,
            KeyEvent event)
    {
        switch (actionId)
        {
        case EditorInfo.IME_ACTION_NEXT:
            boolean result = false;
            TextView v1 = (TextView) v.focusSearch(View.FOCUS_RIGHT);
            if (v1 != null)
                result = v1.requestFocus(View.FOCUS_RIGHT);
            else if (!result)
            {
                v1 = (TextView) v.focusSearch(View.FOCUS_DOWN);
                if (v1 != null)
                    result = v1.requestFocus(View.FOCUS_DOWN);
            }
            if (!result)
                v.onEditorAction(actionId);
            break;

        default:
            v.onEditorAction(actionId);
            break;
        }
        return true;
    }
});

Lien d'origine: https://groups.google.com/forum/?fromgroups=#!topic/Android-developers/OykOG6XtE8w

6
Aliaksei Plashchanski

Définissez simplement le nombre maximal de lignes dans la case EditText dans le fichier de mise en page XML: Android:maxLength="1"

1
user3811671

tiliser une seule ligne de code

tCNPCode.setSingleLine(true);

Il naviguera vers l'élément suivant en entrant appuyez sur

0
Mohsin kazi