EditText только с буквами ASCII.Как? - PullRequest
0 голосов
/ 05 октября 2018

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

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

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

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

imeOptions="flagForceAscii"  

на EditText.

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

0 голосов
/ 05 октября 2018

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...