软键盘跳过带有多个EditText的键入事件

时间:2018-12-28 02:54:57

标签: android android-edittext focus android-softkeyboard

对于其中一项功能,我正在编写一种使用多种(例如4)“编辑文本”的OTP小部件。键入任何一个后,它会将焦点重置到下一个EditText(requestFocus())。

模拟器计算机键盘上,无论是快速还是我尝试填写空白,我们都很高兴看到。

但是当我使用软键盘在真实设备上检查时,它实际上跳过了事件,看起来好像没有得到关注。需要再次点击数字才能输入它。

观察:可能是因为requestFocus()。

您认为有任何改进可以解决!!

1 个答案:

答案 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();
        }
    }
};