我知道问题已被多次询问,但他们的解决方案都没有对我有用。可能是我犯了一些错误。我想转移到下一个EditText
我已完成输入。它是一个带有四个edittexts的引脚屏幕。
我希望我们能够通过在布局xml中放置一些代码来实现它。
以下是我的代码的一部分 - `
<EditText
android:id="@+id/num2"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginRight="7dp"
android:background="@drawable/outline"
android:inputType="numberPassword"
android:maxLength="1"
android:maxLines="1"
android:imeOptions="actionNext"
android:singleLine="true" />
<!-- android:nextFocusForward="@+id/num3" -->
<EditText
android:id="@+id/num3"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginRight="7dp"
android:background="@drawable/outline"
android:inputType="numberPassword"
android:maxLength="1"
android:maxLines="1"
android:singleLine="true" />
<!-- android:nextFocusForward="@+id/num4" -->
<EditText
android:id="@+id/num4"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginRight="7dp"
android:background="@drawable/outline"
android:imeActionId="@+id/submit"
android:imeActionLabel="Log In"
android:imeOptions="actionDone"
android:inputType="numberPassword"
android:maxLength="1"
android:maxLines="1"
android:singleLine="true" />
<!-- android:nextFocusForward="@+id/submit" -->
`
答案 0 :(得分:0)
您可以检查为1st EditText按下的键,如果是“Enter”键,则将焦点移至下一个EditText。
et1.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if(keyCode == 66) {
et2.requestFocus();
}
return false;
}
});
或者你也可以通过Text Watcher来实现它,你可以通过使用Text Watcher类来实现这一点,然后将焦点设置在TextWatcher的OnTextChanged()方法中的下一个EditText上。
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 :(得分:0)
尝试一下:
override fun afterTextChanged(s: Editable) {
(0 until editTextArray.size)
.forEach { i ->
if (s === editTextArray[i].editableText) {
if (s.isBlank()) {
return
}
if (s.length >= 2) {//if more than 1 char
val newTemp = s.toString().substring(s.length - 1, s.length)
if (newTemp != numTemp) {
editTextArray[i].setText(newTemp)
} else {
editTextArray[i].setText(s.toString().substring(0, s.length - 1))
}
} else if (i != editTextArray.size - 1) { //1 char
editTextArray[i + 1].requestFocus()
editTextArray[i + 1].setSelection(editTextArray[i + 1].length())
return
} else
//will verify code the moment the last character is inserted and all digits have a number
verifyCode(testCodeValidity())
}
}
}
并添加onKeyListener来处理退格键:
editTextArray[index].setOnKeyListener { _, keyCode, event ->
if (keyCode == KeyEvent.KEYCODE_DEL && event.action == KeyEvent.ACTION_DOWN) {
//backspace
if (index != 0) { //Don't implement for first digit
editTextArray[index - 1].requestFocus()
editTextArray[index - 1]
.setSelection(editTextArray[index - 1].length())
}
}
false
}