对于其中一项功能,我正在编写一种使用多种(例如4)“编辑文本”的OTP小部件。键入任何一个后,它会将焦点重置到下一个EditText(requestFocus())。
在模拟器和计算机键盘上,无论是快速还是我尝试填写空白,我们都很高兴看到。
但是当我使用软键盘在真实设备上检查时,它实际上跳过了事件,看起来好像没有得到关注。需要再次点击数字才能输入它。
观察:可能是因为requestFocus()。
您认为有任何改进可以解决!!
答案 0 :(得分:0)
尝试一下。
Edit_otp_number1 = findViewById(R.id.edit_otp_number1);
Edit_otp_number2 = findViewById(R.id.edit_otp_number2);
Edit_otp_number3 = findViewById(R.id.edit_otp_number3);
Edit_otp_number4 = findViewById(R.id.edit_otp_number4);
Edit_otp_number1.addTextChangedListener(watcher);
Edit_otp_number2.addTextChangedListener(watcher);
Edit_otp_number3.addTextChangedListener(watcher);
Edit_otp_number4.addTextChangedListener(watcher);
并编写这样的文本观察器。
private final TextWatcher watcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (Edit_otp_number1.hasFocus()) {
Edit_otp_number2.requestFocus();
}
if ((Edit_otp_number2.hasFocus()) && (Edit_otp_number2.getText().length() == 1)) {
Edit_otp_number3.requestFocus();
}
if (Edit_otp_number3.hasFocus() && (Edit_otp_number3.getText().length() == 1)) {
Edit_otp_number4.requestFocus();
}
}
};