Добрый день.
У меня есть два 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()); // Устанавливаем курсор в конец
}
};
В чем может быть проблема с устройствами этой компании и как это можно обойти?