Я хочу ограничить символы только 0-9, az, AZ и пробел. Задав тип ввода, я могу ограничиться цифрами, но не могу понять, как Inputfilter просматривает документы.
android
android-edittext
Тим Уэйн
источник
источник
InputFilter
Это немного сложнее в версиях Android, которые отображают предложения словаря. Вы иногда получаетеSpannableStringBuilder
, иногда простоString
вsource
параметре.Следующее
InputFilter
должно работать. Не стесняйтесь улучшать этот код!источник
String replacement = source.subSequence(start, end).toString(); return replacement.replaceAll("[^A-Za-z0-9_\\-@]", "");
source instanceof SpannableStringBuilder
ввод AB дает мне AAB, как при попытке предыдущего ответа. К счастью, я смог обойти это, используя @florian решение ниже.намного легче:
источник
","
между. Вы можете использовать что-то вроде этого"0123456789qwertzuiopasdfghjklyxcvbnmQWERTZUIOPASDFGHJKLYXCVBNM"
imeOptions="actionNext"
, и т. Д.Ни один из опубликованных ответов не сработал для меня. Я пришел с моим собственным решением:
источник
EditText
уже могут быть свои фильтры, например, фильтр длины. Поэтому вместо того, чтобы просто переопределять фильтры, вы, скорее всего, захотите добавить свои фильтры к уже существующим.Используйте эту свою работу на 100% и очень просто.
В strings.xml
источник
Чтобы избежать специальных символов в типе ввода
Вы можете установить фильтр для вашего текста редактирования, как показано ниже
источник
В дополнение к принятому ответу также можно использовать, например,
android:inputType="textCapCharacters"
в качестве атрибута<EditText>
, чтобы принимать только символы верхнего регистра (и цифры).источник
По какой-то причине конструктор класса android.text.LoginFilter имеет пакетную область, поэтому вы не можете напрямую расширять его (даже если он будет идентичен этому коду). Но вы можете расширить LoginFilter.UsernameFilterGeneric! Тогда у вас просто есть это:
Это на самом деле не задокументировано, но это часть базовой библиотеки, а источник понятен . Я уже давно пользуюсь им, пока проблем нет, хотя признаюсь, что не пробовал делать что-либо сложное, включая spanables.
источник
Это верно, лучший способ исправить это в самом XML-макете, используя:
как справедливо указал Флориан Фрелих, он хорошо работает даже для просмотра текста.
Просто предостережение, символы, упомянутые в,
android:digits
будут отображаться только, так что будьте осторожны, чтобы не пропустить ни одного набора символов :)источник
inputType
это не влияет на фильтрацию.Это простое решение работало для меня, когда мне нужно было запретить пользователю вводить пустые строки в EditText. Конечно, вы можете добавить больше символов:
источник
Если у вас есть подкласс InputFilter, вы можете создать свой собственный InputFilter, который бы отфильтровывал любые не алфавитно-цифровые символы.
Интерфейс InputFilter имеет один метод
filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend)
и предоставляет вам всю необходимую информацию о том, какие символы были введены в EditText, которому он назначен.После того как вы создали свой собственный InputFilter, вы можете назначить его EditText, вызвав setFilters (...).
http://developer.android.com/reference/android/text/InputFilter.html#filter(java.lang.CharSequence , int, int, android.text.Spanned, int, int)
источник
Не обращая внимания на то, с чем сталкиваются другие люди, чтобы правильно обрабатывать предложения словаря, я обнаружил, что следующий код работает.
Источник растет по мере увеличения предложения, поэтому мы должны посмотреть, сколько символов на самом деле мы ожидаем заменить, прежде чем что-то вернуть.
Если у нас нет недопустимых символов, верните null, чтобы произошла замена по умолчанию.
В противном случае нам нужно извлечь действительные символы из подстроки, которая фактически будет помещена в EditText.
источник
чтобы предотвратить слова в тексте редактирования. создать класс, который вы могли бы использовать в любое время.
источник
Сначала добавьте в
strings.xml
:XML :
Код в Котлине:
Странно, но странно работает на мягкой клавиатуре эмулятора.
Предупреждение! Следующий код отфильтрует все буквы и другие символы, кроме цифр для программных клавиатур. На смартфонах появится только цифровая клавиатура.
Я также , как правило , устанавливается
maxLength
,filters
,inputType
.источник
Это старая тема, но у всех намеченных решений есть проблемы (в зависимости от устройства / версии Android / клавиатуры).
РАЗНЫЙ ПОДХОД
Так что в конце концов я пошел по другому пути, вместо того, чтобы использовать
InputFilter
проблемную реализацию, которую я использую,TextWatcher
иTextChangedListener
изEditText
.ПОЛНЫЙ КОД (ПРИМЕР)
Причина
InputFilter
не является хорошим решением в Android, потому что это зависит от реализации клавиатуры. Ввод с клавиатуры фильтруется перед тем, как ввод передается вEditText
. Но, поскольку некоторые клавиатуры имеют разные реализации дляInputFilter.filter()
вызова, это проблематично.С другой стороны
TextWatcher
, не заботится о реализации клавиатуры, это позволяет нам создать простое решение и быть уверенным, что оно будет работать на всех устройствах.источник
onTextChanged
Просто необходимоpublic void
перед ним.Я сделал что-то вроде этого, чтобы сделать это простым:
Таким образом, мы заменим все ненужные символы в новой части исходной строки пустой строкой.
edit_text
Переменной являетсяEditText
объект , который мы имеем в виду.Код написан на
kotlin
.источник
Можно использовать
setOnKeyListener
. В этом методе мы можем настроить вводedittext
!источник
Так я создал фильтр для поля «Имя» в «Редактировать текст». (Первая буква - CAPS, и после каждого слова допускается только один пробел.
источник
У меня такой же ответ в Kotlin:
и получить класс с функцией Extension:
источник