Подтвердить что ты не робот

KeyCode_Enter к следующему редактору

В edittext, после ввода 'Enter', система создаст новую строку внутри него. Я хотел бы сосредоточиться на следующем edittext, без новой строки. как закодировать? мой код в xml ниже

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

Я также caputer key code в 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;
        }
    });
4b9b3361

Ответ 1

Вы должны использовать метод requestFocus. В вашем случае это будет что-то вроде:

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

Ответ 2

Вам даже не нужно использовать OnKeyListener. Просто добавьте строку android:singleLine="true" к вашему EditText. После этой операции EditText ведет себя точно так, как вы хотите. Итак, в вашем конкретном случае:

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

решает проблему.

Ответ 3

Лучший способ - использовать одну из опций для inputType, например: android:inputType="textPersonName" Это позволит достичь желаемого эффекта. Проверьте другие варианты, это сэкономит вам время в будущем:)

Вы не должны использовать андроид: singleLine = "true", поскольку он устарел. Вот что говорится в документах:

Этот атрибут устарел и заменяется textMultiLine  флаг в атрибуте inputType. Соблюдайте осторожность при изменении существующих  макетов, так как значение по умолчанию singeLine равно false (многострочный  mode), но если вы укажете любое значение для inputType, по умолчанию используется  однострочный режим. (Если оба атрибута singleLine и inputType  found, флаги inputType будут переопределять значение singleLine.).

Ответ 4

Рассмотрим варианты IME, хорошее описание здесь http://androidcookbook.com/Recipe.seam;jsessionid=C824437B48F346E23FBE5828969029B4?recipeId=422 и здесь документация http://developer.android.com/reference/android/widget/TextView.html#attr_android:imeOptions.

Единственное, что вам нужно - добавить атрибут android: imeOptions = "actionNext" на каждый EditText. Появится клавиатура с клавишей "Далее", где "Enter" используется, и позволяет перейти к следующему EditText.

Но порядок "actionNext" - сверху вниз. Например, если у вас есть горизонтальный макет:

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

et2 никогда не фокусируется. Вы должны исправить это в коде:

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

Оригинальная ссылка: https://groups.google.com/forum/?fromgroups=#!topic/android-developers/OykOG6XtE8w

Ответ 5

Просто установите максимальное число строк в поле EditText в файле макета xml: android:maxLength="1"

Ответ 6

Use Single Line of Code

tCNPCode.setSingleLine(true);

Он перейдет к следующему пункту при вводе нажмите