Событие ввода с пропуском программной клавиатуры с несколькими правками - PullRequest
0 голосов
/ 28 декабря 2018

Для одной из функций я пишу виджет OTP, который использует несколько (скажем, 4) Edit Text.Когда вы набираете любой из них, он сбрасывает фокус на следующий EditText (requestFocus ()).

Вкл. Симулятор с Клавиатура компьютера , он рад наблюдать за этимИ неважно, как быстро Я пытаюсь заполнить пробел.

Но когда я проверил на реальном устройстве программную клавиатуру, оно фактически пропускало событие, похоже, что оно не фокусировалось.Потребовалось еще одно нажатие на номер, чтобы ввести его.

Наблюдение: Возможно, это из-за requestFocus ().

Видите ли вы какие-либо улучшения, чтобы это исправить !!

1 Ответ

0 голосов
/ 28 декабря 2018

Попробуйте это ..

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