2010-08-11 3 views
58

В макете XML можно указать android:imeOptions="actionNext", который добавляет кнопку Next в виртуальную клавиатуру и нажимая на нее - фокус переходит в следующее поле.imeOptions "actionNext" программно - как перейти к следующему полю?

Как это сделать программно - например, на основе какого-либо события триггер фокус, чтобы перейти к следующему полю?

ответ

136

Вы можете использовать константы из класса EditorInfo для параметров IME. как,

editText.setImeOptions(EditorInfo.IME_ACTION_NEXT); 
+0

да, иначе он вставляет новую строку и переходит к такому =) –

20

Искать следующее фокусируемое поле, а не ссылаться requestFocus().

TextView nextField = (TextView)currentField.focusSearch(View.FOCUS_RIGHT); 
nextField.requestFocus(); 
+1

Это не истинный ответ в ссылке на названии этого вопроса, но формально является правильным ответом. Ниже ответ более уместен. –

+5

@SeanGlover О, ** ниже ** слово настолько субъективно ... –

+2

@SeanGlover вы никогда не должны использовать слова типа *** ниже ***, потому что позиция ответов продолжает меняться. – Nike15

7

Существует всегда необходимость добавить дополнительные клавиши, кроме клавиш по умолчанию, доступных в виртуальном QWERTY клавиатуры.

Использование XML

<EditText android:text="@+id/EditText01" 
android:id="@+id/EditText01" 
android:layout_height="wrap_content" 
android:layout_width="fill_parent" 
android:imeOptions="actionDone"/> 

By Programmatic Way

EditorInfo является наиболее полезным классом, когда вам приходится иметь дело с любым типом пользовательского ввода в вашем Android приложения.

IME_ACTION_DONE: Это действие выполняет операцию «done» для ввода ничего, и IME будет закрыт.

EditTextSample.setImeOptions(EditorInfo.IME_ACTION_DONE); 

Для получения дополнительной информации вы можете посетить http://developer.android.com/reference/android/view/inputmethod/EditorInfo.html

8

Просто предложение, если вы используете

 EditTextSample.setImeOptions(EditorInfo.IME_ACTION_DONE); 

это не работает, убедитесь, что ваш EditText использует одну линию.

Например:

 editTextSample.setSingleLine(); 
Смежные вопросы