如何跳转到下一个字段?

在布局 XML 中,可以指定 android:imeOptions="actionNext",它在虚拟键盘中添加 Next按钮,并通过点击它-焦点跳转到下一个字段。

如何通过编程实现这一点——例如,根据某个事件触发器焦点转到下一个字段?

65854 次浏览

Search for the next focusable field and than invoke requestFocus().

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

You can use the constants from EditorInfo class for the IME options. like,

editText.setImeOptions(EditorInfo.IME_ACTION_NEXT);

There is always necessity to add extra keys apart from default keys available in virtual QWERTY keyboard.

Using 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

An EditorInfo is most useful class when you have to deal with any type of user input in your Android application.

IME_ACTION_DONE: This action performs a “done” operation for nothing to input and the IME will be closed.

 EditTextSample.setImeOptions(EditorInfo.IME_ACTION_DONE);

For more information you may visit http://developer.android.com/reference/android/view/inputmethod/EditorInfo.html

Just suggestion, if you are using

     EditTextSample.setImeOptions(EditorInfo.IME_ACTION_DONE);

it doesn't work, make sure that your EditText is using a single line.

Eg:

       editTextSample.setSingleLine();

The kotlin pendant

editText.imeOptions = EditorInfo.IME_ACTION_DONE
editText.setLines(1);
editText.setSingleLine(true);
editText.setImeOptions(EditorInfo.IME_ACTION_GO);

I solve the problem make sure with single line and go next editText when click enter

In my case, set an imeOptions fix the problem.

edtAnswer.maxLines = 1
edtAnswer.inputType = InputType.TYPE_CLASS_TEXT
edtAnswer.imeOptions = EditorInfo.IME_ACTION_NEXT

You can do this by

edittext.imeOptions = EditorInfo.IME_ACTION_DONE //for done button

or

edittext.imeOptions = EditorInfo.IME_ACTION_NEXT //for next button

But... you need to understand that if you are using filters for edittext then you need to set

edittext.setSingleLine()

You can jump to the next field by using the following code:

BaseInputConnection inputConnection = new BaseInputConnection(editText, true);
inputConnection.performEditorAction(EditorInfo.IME_ACTION_NEXT);
//Use EditorInfo.IME_ACTION_UNSPECIFIED if you set android:imeOptions on the EditText

I tried all of the answers but EditorAction worked for me!

EditText.onEditorAction(EditorInfo.IME_ACTION_NEXT)

My XML layout:

  <EditText
android:id="@+id/input1"
style="@style/edittext"
android:nextFocusForward="@id/input2"
android:layout_width="0dp"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/input2"
style="@style/edittext"
android:nextFocusLeft="@id/input1"
android:layout_weight="1"
android:nextFocusRight="@id/input3"
android:layout_width="0dp"
android:layout_height="wrap_content"/>

and Kotlin code:

input1.onEditorAction(EditorInfo.IME_ACTION_NEXT)

Now focus moves to the input2 Edittext.