KeyCode_Enter для следующего текста редактирования - PullRequest
27 голосов
/ 11 июня 2010

В тексте редактирования после ввода клавиши «Ввод» система создает новую строку внутри него. Я бы хотел сосредоточиться на следующем тексте редактирования, а не на новой строке. как кодировать? мой код в 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"/>  

Я также скрываю код клавиши в 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;
        }
    });

Ответы [ 5 ]

36 голосов
/ 28 сентября 2011

Вам даже не нужно использовать 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"
/>

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

13 голосов
/ 11 июня 2010

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

tCNPCode.setOnKeyListener(new OnKeyListener() {
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if(keyCode == 66) {
            txtCNPCode.requestFocus();
        }
        return false;
    }
});
10 голосов
/ 09 января 2012

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

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

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

6 голосов
/ 12 февраля 2013

Рассмотрите параметры 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.Клавиатура появляется с клавишей Next, где раньше находился 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

1 голос
/ 27 апреля 2015

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

...