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

Я также код ключа caputor в 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; } }); 

Solutions Collecting From Web of "KeyCode_Enter к следующему редактору"

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

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

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

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

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

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

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

Рассмотрите варианты 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

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