Я пытаюсь написать приложение, которое поможет вам управлять своими финансами. Я использую EditText
поле, в котором пользователь может указать сумму денег.
Я установил inputType
в numberDecimal
которой работает отлично, за исключением того, что это позволяет людям вводить цифры , такие как 123.122
, не идеально подходит для денег.
Есть ли способ ограничить количество символов после десятичной точки до двух?
java
android
android-edittext
Константин Вайц
источник
источник
InputFilter
интерфейс, кажется, он делает то, что я хочу, developer.android.com/reference/android/text/method/… , но метод,filter
который я должен реализовать, меня довольно смущает. Кто-нибудь уже писал такой фильтр и умеет им пользоваться?Ответы:
Более элегантным способом было бы использование регулярного выражения (regex) следующим образом:
Чтобы использовать это:
источник
Более простое решение без использования регулярного выражения:
Использовать:
источник
Эта реализация
InputFilter
решает проблему.источник
Вот пример InputFilter, который допускает максимум 4 цифры до десятичной точки и максимум 1 цифру после нее .
Значения, которые позволяет edittext: 555.2 , 555 , .2
Значения, которые редактируют блоки текста: 55555.2 , 055.2 , 555.42
источник
Я сделал несколько исправлений для решения @Pinhassi. Он обрабатывает некоторые случаи:
1. вы можете перемещать курсор куда угодно
2. обработка знака минус
3. цифры перед = 2 и цифры после = 4, и вы вводите 12,4545. Тогда, если вы хотите удалить ".", Это не позволит.
источник
android:inputType="number"
илиandroid:inputType="numberDecimal"
он не позволяет вводить минус, этоandroid:digits="0123456789.-"
не помогаетДругое решение мне не нравится, и я создал свое. С помощью этого решения вы не можете ввести больше, чем MAX_BEFORE_POINT цифр перед точкой, а десятичные дроби не могут быть больше MAX_DECIMAL.
Вы просто не можете набрать лишнюю цифру, никаких других эффектов! Дополнительно, если вы напишете "." он набирает «0».
Установите EditText в макете на:
андроид: inputType = "numberDecimal"
Добавьте слушателя в свой onCreate. Если вы хотите изменить количество цифр до и после точки, отредактируйте вызов на PerfectDecimal (str, NUMBER_BEFORE_POINT, NUMBER_DECIMALS), здесь установлено 3 и 2
Включите эту Funcion:
Готово!
источник
Я добился этого с помощью
TextWatcher
следующего способаЭто решение не позволит пользователю вводить более двух цифр после десятичной точки. Также вы можете ввести любое количество цифр до десятичной точки. См. Этот блог http://v4all123.blogspot.com/2013/05/set-limit-for-fraction-in-decimal.html, чтобы установить фильтр для нескольких EditText. Я надеюсь, это поможет. Спасибо.
источник
count
с помощью-1
. Только тогда это будет работать правильно.int count = -1;
listener
. В любом случае , пожалуйста, смотрите в моем блоге пост . Вы можете получить представление. Если не можете, дайте мне знать. Помогу вам в этом вопросе.Придуманный мной InputFilter позволяет настраивать количество цифр до и после десятичного разряда. Кроме того, он запрещает нули в начале.
источник
Требуется 2 цифры после запятой. Количество цифр перед десятичной точкой не должно быть ограничено . Итак, решение должно быть таким,
И используйте его как
Спасибо @Pinhassi за вдохновение.
источник
Мое решение простое и отлично работает!
Использование:
источник
isValid()
в конструктор, чтобы избежать повторного создания шаблонов при каждомisValid()
вызове.Попробуйте использовать NumberFormat.getCurrencyInstance () для форматирования строки перед тем, как поместить ее в TextView.
Что-то вроде:
Изменить - нет inputType для валюты, которую я мог найти в документах. Я полагаю, это потому, что есть некоторые валюты, которые не подчиняются тому же правилу для десятичных знаков, например, японская иена.
Как упоминала LeffelMania, вы можете исправить вводимые пользователем данные, используя приведенный выше код с
TextWatcher
установленным на вашемEditText
.источник
Немного улучшенное решение @Pinhassi.
Работает очень хорошо. Он проверяет сцепленные строки.
источник
Я изменил вышеуказанные решения и создал следующее. Вы можете установить количество цифр до и после десятичной точки.
}
источник
Когда вы выходите из фазы редактирования, он форматирует поле до нужного формата. На данный момент в нем всего 2 десятичных знака. Я думаю, это довольно простой способ сделать это.
источник
Все ответы здесь довольно сложные, я постарался сделать это намного проще. Посмотрите на мой код и решите сами -
источник
Мне очень понравился ответ Пинхасси, но я заметил, что после того, как пользователь ввел указанные числовые цифры после десятичной точки, вы больше не могли вводить текст слева от десятичной точки. Проблема заключалась в том, что решение проверяло только предыдущий введенный текст, а не текущий вводимый текст. Итак, вот мое решение, которое вставляет новый символ в исходный текст для проверки.
И призыв установить фильтр editText
источник
Я улучшил решение, которое использует регулярное выражение от Pinhassi, поэтому оно также правильно обрабатывает крайние случаи. Перед проверкой правильности ввода сначала создается последняя строка, как описано в документации Android.
Использование:
источник
Класс Simple Helper предназначен для предотвращения ввода пользователем более двух цифр после запятой:
источник
Я изменил ответ №6 (автор Favas Kv), потому что в нем можно поставить точку на первой позиции.
источник
Как говорили другие, я добавил этот класс в свой проект и установил фильтр на «
EditText
Я хочу».Фильтр скопирован из ответа @ Pixel. Я просто собираю все вместе.
Теперь установите фильтр в вашем
EditText
вот так.Здесь одна важная вещь заключается в том, что он решает мою проблему, заключающуюся в том, что я не позволяю отображать более двух цифр после десятичной точки в этом,
EditText
но проблема в том, что когда яgetText()
из этогоEditText
, он возвращает весь введенный мной ввод.Например, после применения фильтра к
EditText
, я попытался установить input 1.5699856987. Итак, на экране отображается 1,56, что идеально.Затем я хотел использовать этот ввод для некоторых других вычислений, поэтому я хотел получить текст из этого поля ввода (
EditText
). Когда я позвонилmEditText.getText().toString()
он вернул 1,5699856987, что в моем случае было неприемлемо.Поэтому мне пришлось снова проанализировать значение после получения его из
EditText
.setScale
делает фокус здесь после получения полного текста изEditText
.источник
Я тоже столкнулся с этой проблемой. Я хотел иметь возможность повторно использовать код во многих EditTexts. Это мое решение:
Использование :
Класс:
источник
@Meh для тебя ..
источник
Очень поздний ответ: мы можем сделать это просто так:
источник
Вот те,
TextWatcher
которые позволяют только n цифр после десятичной точки.TextWatcher
Как пользоваться
источник
Самый простой способ добиться этого:
источник
Вот мое решение:
Если пользователь вводит число, состоящее из более чем двух цифр после десятичной точки, оно будет автоматически исправлено.
Надеюсь, я помог!
источник
У меня это отлично работает. Это позволяет вводить значение даже после изменения фокуса и возврата. Например:
123.00
,12.12
,0.01
и т.д ..1.
Integer.parseInt(getString(R.string.valuelength))
Определяет длину входных данных,digits.Values
к которым осуществляется доступ изstring.xml
файла. Значения легко изменить. 2.Integer.parseInt(getString(R.string.valuedecimal))
Это максимальный предел десятичных разрядов.Массив
EditText
значений, позволяющий совершить действие.Я просто использовал массив значений, содержащий несколько
DecimalDigitsInputFilterNew.class
файлов edittext Next .источник
Это основано на ответе Пиньясси - проблема, с которой я столкнулся, заключалась в том, что вы не могли добавлять значения до десятичной дроби после достижения десятичного предела. Чтобы решить эту проблему, нам нужно создать последнюю строку перед сопоставлением с шаблоном.
источник
источник
source
послеet.getText()
. Он всегда понимает, что люди печатают в конце поля, а не в начале поля.StringBuilder stringBuilder = new StringBuilder(text.getText().toString()); stringBuilder.replace(dstart, dend, source.toString()); String temp = stringBuilder.toString();
должно сработать. Спасибо, в любом случае.Создайте новый класс в Android kotlin с именем DecimalDigitsInputFilter
Вызовите этот класс со следующей строкой
есть слишком много ответов для одного и того же, но это позволит вам ввести 8 цифр перед десятичной и 2 цифры после десятичной
другие ответы принимают только 8 цифр
источник