EditText только с буквами ascii. Как?

У основных пользователей моего приложения установлено 2 языка. Английский и др. Системный язык по умолчанию не английский. Пользователи могут использовать кнопку переключения языка на программной клавиатуре.

Одно конкретное поле EditText в моем приложении должно принимать только A-Z (проблема с заглавными буквами не является проблемой) и пробелы и никакие другие символы (без цифр, без латинских символов и т. д.).

Я разбирался в решениях с InputFilters, такими как Как создать EditText принимает алфавиты только в android?, или с TextWatcher, но ваше единственное приложение позволяет просто игнорировать неправильный текст, и мне нужно, чтобы пользователь даже не мог видеть буквы, отличные от латинских, в первую очередь на своей экранной клавиатуре. (Я знаю, что можно использовать аппаратную клавиатуру, в настоящее время это не проблема).

android:digits = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ "
Не помогает (кнопка смены языка все еще видна на клавиатуре).

Мне нужно что-то вроде iPhone: изменение языка клавиатуры программным способом, но для Android.

Есть ли у меня другой вариант, кроме добавления фальшивой клавиатуры в мое приложение?

У iOS есть .keyboardType = .asciiCapable, и он работает в таких ситуациях

3
0
1 780
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать фильтр ввода и назначить его для редактирования текстов

См. Пример ниже

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

Как отмечалось в вопросе (я уточню вопрос) - подход InputFilter тоже был опробован. Это не позволяет пользователю вводить текст. Это не мешает переключить клавиатуру на другие языки.

dkzm 05.10.2018 14:25
Ответ принят как подходящий

Нашел хотя бы полу-рабочее решение на основе https://stackoverflow.com/a/49710730/1063214

imeOptions = "flagForceAscii"  

в EditText.

Теперь, по крайней мере, неанглийская клавиатура не отображается (а цифры и т. д.) Все равно фильтруются.

Другие вопросы по теме