Ответ 1
Вы можете проверить нажатую клавишу для 1-го EditText, и если она была "Enter", а затем переместить фокус в следующий EditText.
Это может помочь вам: KeyCode_Enter к следующему редактору
В соответствии с ответом и ответом Как автоматически перейти к следующему редактированию текста в android, я использовал код для перехода к следующему окну редактирования.
et1.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start,int before, int count)
{
// TODO Auto-generated method stub
if(et1.getText().toString().length()==size) //size as per your requirement
{
et2.requestFocus();
}
}
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
// TODO Auto-generated method stub
}
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
Проблема, с которой я сталкиваюсь, заключается в том, что я ввожу что-то неправильно, и даже если пользователь явно запрашивает фокус, текстовое поле переходит к следующему из-за кода в наблюдателе текста. Есть ли что-нибудь, что я могу сделать, чтобы это не произошло?
Вы можете проверить нажатую клавишу для 1-го EditText, и если она была "Enter", а затем переместить фокус в следующий EditText.
Это может помочь вам: KeyCode_Enter к следующему редактору
Возможно, очень поздно, но у меня есть решение, которое намного проще применять. Просто добавьте этот код в поле edittext в файле layout.xml. Добавьте это в edittext, который вы хотите показать следующую кнопку, а не сделанную кнопку. Таким образом, он укажет на следующее поле Edittext.
android:imeOptions="actionNext"
Если вы хотите сфокусировать следующий EditText на нажатом нажатии, вы можете использовать эти параметры в XML-коде, чтобы сфокусировать следующий EditText:
Вариант 1:
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:imeOptions="actionNext"
android:singleLine="true"/>
Вариант 2:
<EditText
android:id="@+id/et1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:nextFocusForward="@+id/et2"/>
<EditText
android:id="@+id/et2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"/>
Вам нужно подтвердить ввод пользователя, чтобы оправдать ваши ожидания. Если это выполнено, тогда вызывайте только et2.requestFocu()
Это работает для меня:
final EditText code1=((EditText)view.findViewById(R.id.code1));
final EditText code2=((EditText)view.findViewById(R.id.code2));
final EditText code3=((EditText)view.findViewById(R.id.code3));
final EditText code4=((EditText)view.findViewById(R.id.code4));
OnKeyListener key=new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if(!((EditText) v).toString().isEmpty())
v.focusSearch(View.FOCUS_RIGHT).requestFocus();
return false;
}
};
code1.setOnKeyListener(key);
code2.setOnKeyListener(key);
code3.setOnKeyListener(key);
Вы также можете проверить свое условие, если это так, или нет.
if(et1.getText().toString().length()==size) //size as per your requirement
{
if(et1.gettext.toString().equals(somethingwhichyouhavecheck))
{
et2.requestFocus();
}
else
{
}
}
Этот код работает так, как ожидалось.
etFName.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if(etFName.getText().toString().length()==4 && keyCode == KeyEvent.KEYCODE_BACK)
{
typinget1 = true;
}
else if(etFName.getText().toString().length()==4 && typinget1==true) //size as per your requirement
{
typinget1 = false;
etLName.requestFocus();
}
else if(etFName.getText().toString().length()<=4 && typinget1==false)
{
typinget1 = true;
}
return false;
}
});
У меня очень простое решение для этого просто поместите следующее свойство в xml edittext control
Android: inputType = "textPersonName"