@heybanana

Как обойти некорректную работу EditText.setSelection() на устройствах Asus?

Добрый день.

У меня есть два InputFilter, прикрепленных к EditText: стандартный фильтр AllCaps() для перевода букв в верхний регистр и самописный для разрешения ввода буквенных символов. Все работает отлично, но только не на устройствах Asus (Zenfone 4 и 5 на Intel).

Кроме фильтров, на EditText навешен TextWatcher, транслитерирующий введенные латинские символы в русские (код ниже).

Проблема на устройствах Asus заключается в следующем: устройство не дает ввести больше одной буквы. Похоже, что проблема заключается в установке курсора через EditText.setSelection(). Если не использовать такой способ задания места курсора, то в поле ввода вводится любое нужное число букв (с неправильным курсором, конечно, что "перемешивает" текст).

Код:

etCardholder.setFilters(new InputFilter[]{new InputFilter.AllCaps(), new NameInputeFilter(false)});

twTransliterator = 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) {
        etCardholder.removeTextChangedListener(twTransliterator);
        etCardholder.setText(StringTools.transliterateCharacterRuToEn(s.toString())); // Делаем преобразования и устанавливаем результат в EditText
        etCardholder.addTextChangedListener(twTransliterator);
    }

    @Override
    public void afterTextChanged(Editable s) {
        etCardholder.setSelection(etCardholder.getText().length()); // Устанавливаем курсор в конец
    }
};


В чем может быть проблема с устройствами этой компании и как это можно обойти?
  • Вопрос задан
  • 371 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы