Entrée de KeyCode dans le prochain texte d'édition

dans edittext, après avoir tapé la touche 'Enter', le système crée une nouvelle ligne à l'intérieur de celle-ci. J'aimerais me concentrer sur le prochain texte, pas de nouvelle ligne. comment le code? mon code en xml est en dessous de

    <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"/>  

j'ai aussi caputer code de la clé 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;
        }
    });
24
demandé sur walkmn 2010-06-11 07:09:37

5 réponses

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;
    }
});
12
répondu Cristian 2011-10-07 21:50:56

Vous n'avez même pas à utiliser OnKeyListener . Il suffit d'ajouter la ligne android:singleLine="true" à votre EditText . Après cette opération EditText se comporte exactement comme vous voulez. 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.

34
répondu Antek 2011-09-28 09:04:16

La meilleure façon est d'utiliser l'une des options pour inputType, par exemple: android:inputType="textPersonName" Cela permettra d'atteindre l'effet recherché. Vérifiez les autres options aussi, cela vous fera gagner du temps à l'avenir :)

vous ne devriez pas utiliser android:singleLine=" true", car il est déprécié. Voici ce que les documentations en disent:

cet attribut est déprécié et est remplacé par le textMultiLine drapeau dans l'attribut inputType. Utiliser attention lors de la modification existant layouts, comme la valeur par défaut de singeLine est false (multi-line mode), mais si vous spécifiez une valeur pour inputType, la valeur par défaut est seul le mode en ligne. (Si les attributs singleLine et inputType sont found, les options inputType annuleront la valeur de singleLine.).

9
répondu Stan 2012-01-09 09:33:24

envisager IME options, 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 texte édité. Le clavier apparaît avec une touche suivante où Enter était et permet de naviguer vers le texte D'édition suivant.

mais l'ordre de "actionNext" est de haut en bas. Par exemple, si vous avez la 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 Original: https://groups.google.com/forum/?fromgroups=#!topic / android-developers/OykOG6XtE8w

6
répondu Aliaksei Plashchanski 2013-02-12 13:19:02

vient de définir le nombre maximum de lignes à la case EditText dans le fichier de mise en page xml: android:maxLength="1"

1
répondu user3811671 2016-12-09 05:37:16