У основных пользователей моего приложения установлено 2 языка. Английский и др. Системный язык по умолчанию не английский. Пользователи могут использовать кнопку переключения языка на программной клавиатуре.
Одно конкретное поле EditText в моем приложении должно принимать только A-Z (проблема с заглавными буквами не является проблемой) и пробелы и никакие другие символы (без цифр, без латинских символов и т. д.).
Я разбирался в решениях с InputFilters, такими как Как создать EditText принимает алфавиты только в android?, или с TextWatcher, но ваше единственное приложение позволяет просто игнорировать неправильный текст, и мне нужно, чтобы пользователь даже не мог видеть буквы, отличные от латинских, в первую очередь на своей экранной клавиатуре. (Я знаю, что можно использовать аппаратную клавиатуру, в настоящее время это не проблема).
android:digits = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ "
Не помогает (кнопка смены языка все еще видна на клавиатуре).
Мне нужно что-то вроде iPhone: изменение языка клавиатуры программным способом, но для Android.
Есть ли у меня другой вариант, кроме добавления фальшивой клавиатуры в мое приложение?
У iOS есть .keyboardType = .asciiCapable, и он работает в таких ситуациях
Вы можете использовать фильтр ввода и назначить его для редактирования текстов
См. Пример ниже
public class AlphabetInputFilter implements InputFilter {
Pattern mPattern;
public AlphabetInputFilter() {
mPattern = Pattern.compile("[a-z]");
}
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
String formatedSource = dest.subSequence(0, dstart).toString();
String destPrefix = source.subSequence(start, end).toString();
String destSuffix = dest.subSequence(dend, dest.length()).toString();
CharSequence match = TextUtils.concat(formatedSource, destPrefix, destSuffix);
Matcher matcher = mPattern.matcher(match);
if (!matcher.matches())
return "";
return null;
}
}
И вы можете назначить ему редактировать текст
mEdittext.setFilters(new InputFilter[]{
new AlphabetInputFilter()});
пользователь не сможет ввести любое значение, кроме от a до z
Нашел хотя бы полу-рабочее решение на основе https://stackoverflow.com/a/49710730/1063214
imeOptions = "flagForceAscii"
в EditText.
Теперь, по крайней мере, неанглийская клавиатура не отображается (а цифры и т. д.) Все равно фильтруются.
Как отмечалось в вопросе (я уточню вопрос) - подход InputFilter тоже был опробован. Это не позволяет пользователю вводить текст. Это не мешает переключить клавиатуру на другие языки.