Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
BargystVelp
2 / 2 / 2
Регистрация: 18.07.2017
Сообщений: 46
1

EditText setFilters не работает в некоторых случаях

28.07.2017, 22:27. Просмотров 898. Ответов 2
Метки нет (Все метки)

Здравствуйте.
Нужно, чтобы пользователь мог вводить только русские буквы в editText. Я использовал editText.setFilters() и он действительно ограничивает ввод всех символов кроме русских букв. Но Если ввести слово и следом цифру (например) все слово удаляется, или если быстро нажимать пробел, то он начинает стирать по одной букве. Как это исправить?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
editText.setFilters(new InputFilter[]{
                new InputFilter() {
                    @Override
                    public CharSequence filter(CharSequence source, int start,
                                               int end, Spanned dest, int dstart, int dend) {
                        if (source.equals("")) { // for backspace
                            return source;
                        }
                        if (source.toString().matches("[а-яА-ЯёЁ]+")) {
                            return source;
                        }
                        return "";
                    }
                }
        });
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2017, 22:27
Ответы с готовыми решениями:

Ввод в один EditText и авто-вычисление в двух других EditText
Всем привет. Есть три поля EditText,виртуальные клавиатуры у всех...

EditText смещается вниз при вводе текста, который занимает объём больше, чем EditText
EditText сещается вниз при вводе текста который занимает обём больше чем...

Динамическое создание edittext и обработка данных из edittext
Здравствуйте, мне нужна помощь, у меня есть таблица, где динамически создаются...

Почему в EditText не работает html тэг <strike>?
Добрый вечер, Почему не работает конструкция: Spanned s=...

Не работает анимация в некоторых случаях
Всем доброе время суток. Проблема в следующем: ни как не получается &quot;оживить...

2
BargystVelp
2 / 2 / 2
Регистрация: 18.07.2017
Сообщений: 46
01.08.2017, 20:45  [ТС] 2
Ребят нет идей?
Может есть иной красивый способ реализации?
0
arzrav
73 / 74 / 4
Регистрация: 25.09.2012
Сообщений: 212
03.08.2017, 17:34 3
Лучший ответ Сообщение было отмечено BargystVelp как решение

Решение

У меня это реализовано вот так. Все работает как часы.
Класс RegexInputFilter:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import android.text.InputFilter;
import android.text.Spanned;
 
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
 
public class RegexInputFilter implements InputFilter {
 
    private static final String CLASS_NAME = RegexInputFilter.class.getSimpleName();
    private Pattern mPattern;
 
    public RegexInputFilter(Pattern pattern) {
        if (pattern == null) {
            throw new IllegalArgumentException(CLASS_NAME + " requires a regex.");
        }
 
        mPattern = pattern;
    }
 
    public RegexInputFilter(String pattern) {
        this(Pattern.compile(pattern));
    }
 
    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
        Matcher matcher = mPattern.matcher(source);
        if (!matcher.matches()) {
            return "";
        }
        return null;
    }
}
Применение в другом классе на EditText:
Java
1
2
3
4
5
RegexInputFilter nameFilter = new RegexInputFilter("[А-Яа-яёЁA-Za-z -]");
mPatientFirstName.setFilters(new InputFilter[]{
                nameFilter,
                new InputFilter.LengthFilter(50)
        });
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.08.2017, 17:34

Почему в некоторых случаях используется массив для хранения стека, а в некоторых нет?
Почему в некоторых случаях используется массив для хранения стека ,а в...

Делегат в некоторых случаях должен принимать парамертр, а в некоторых не должен
Есть делегат который в некоторых случаях должен принимать парамертр, а в...

Не округлять числа в некоторых случаях
Всем доброе время суток ! Относительно способов округления существует...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru