В inputType
numberDecimal
in EditText
используется точка '.' как десятичный разделитель. В Европе вместо этого принято использовать запятую. Несмотря на то, что мой языковой стандарт установлен как немецкий, десятичным разделителем по-прежнему является '.'
Есть ли способ использовать запятую в качестве десятичного разделителя?
Ответы:
Обходной путь (пока Google не исправит эту ошибку) - использовать
EditText
вместе сandroid:inputType="numberDecimal"
иandroid:digits="0123456789.,"
.Затем добавьте TextChangedListener в EditText со следующим значением afterTextChanged:
источник
Вариант предлагаемых здесь «цифровых» решений:
С учетом разделителя локали.
источник
,
на своих клавиатурах. Примеры: клавиатура Samsung (KitKat).Следующая маска валюты кода для EditText (123 125,155 долл. США)
Макет XML
Код
источник
Это известная ошибка в Android SDK. Единственный обходной путь - создать собственную виртуальную клавиатуру. Вы можете найти пример реализации здесь .
источник
Ответ Мартинса не сработает, если вы создаете экземпляр EditText программно. Я пошел дальше и изменил включенный
DigitsKeyListener
класс из API 14, чтобы использовать запятую и точку в качестве десятичного разделителя.Для того, чтобы использовать эту функцию , вызов
setKeyListener()
наEditText
, например ,Однако вам все равно придется использовать уловку Мартина в том, что
TextChangedListener
вы заменяете запятые точкамиисточник
вы можете использовать следующее для разных языков
источник
Вы можете использовать следующий обходной путь, чтобы также включить запятую в качестве допустимого ввода: -
Через XML:
Программный:
Таким образом, система Android покажет клавиатуру цифр и разрешит ввод запятой. Надеюсь, это ответит на вопрос :)
источник
Для решений Mono (Droid):
источник
Вы можете сделать следующее:
А затем вы можете использовать входной фильтр:
}
источник
IMHO лучший подход к этой проблеме - просто использовать InputFilter. Хорошая суть здесь DecimalDigitsInputFilter . Тогда вы можете просто:
источник
чтобы локализовать использование ввода:
а затем добавьте:
чем не забудьте заменить "," на "." поэтому Float или Double могут анализировать его без ошибок.
источник
Во всех остальных сообщениях здесь были серьезные дыры, поэтому вот решение, которое:
В XML:
Переменная класса:
В onCreate найдите разделитель, используемый в текущей локали:
Также onCreate, используйте это, чтобы обновить его, если вы загружаете текущее значение:
Также onCreate, добавьте слушателей
editTextWatcher
Пример doSomething (), преобразование в стандартный период для обработки данных
источник
Android имеет встроенный модуль форматирования чисел.
Вы можете добавить это в свой,
EditText
чтобы разрешить десятичные дроби и запятые:android:inputType="numberDecimal"
иandroid:digits="0123456789.,"
Затем где-нибудь в вашем коде, когда пользователь нажимает кнопку «Сохранить» или после ввода текста (используйте прослушиватель).
источник
Я решил заменить запятую на точку только при редактировании. Вот мой хитрый и относительно простой обходной путь:
someDecimalFormatter будет использовать запятую или точку в зависимости от локали
источник
Я не знаю, почему ваши ответы такие сложные. Если в SDK есть ошибка, вы должны ее исправить или обойти.
Я выбрал второй способ решения этой проблемы. Если вы отформатируете свою строку как,
Locale.ENGLISH
а затем поместите ее вEditText
(даже как пустую строку). Пример:String.format(Locale.ENGLISH,"%.6f", yourFloatNumber);
Преследуя это решение, ваш результат совместим с показанной клавиатурой. Тогда числа с плавающей запятой и двойные числа работают типично для языков программирования с точкой вместо запятой.
источник
Мое решение:
По основному виду деятельности:
char separator =DecimalFormatSymbols.getInstance().getDecimalSeparator(); textViewPitchDeadZone.setKeyListener(DigitsKeyListener.getInstance("0123456789" + separator));
В xml файле:
android:imeOptions="flagNoFullscreen" android:inputType="numberDecimal"
и я взял двойное значение в editText как String.
источник
Я могу подтвердить, что предложенные исправления не работают с IME Samsung (по крайней мере, на S6 и S9) и, возможно, LG. Они по-прежнему показывают точку в качестве десятичного разделителя независимо от языкового стандарта. Переход на IME Google исправляет это, но вряд ли вариант для большинства разработчиков.
Это также не было исправлено в Oreo для этих клавиатур, поскольку это исправление, которое Samsung и / или LG должны сделать, а затем подтолкнуть даже к своим древним телефонам.
Вместо этого я раздвоил проект цифровой клавиатуры и добавил режим, в котором он ведет себя как вилка IME : . Подробнее см. В примере проекта. Это сработало для меня очень хорошо и похоже на многие поддельные IME для ввода PIN-кода, которые вы видите в банковских приложениях.
источник
Прошло более 8 лет, и я удивлен, эта проблема еще не устранена ...
Я боролся с этой простой проблемой, так как ответ @Martin, получивший наибольшее количество голосов, позволяет вводить несколько разделителей, т.е. пользователь может ввести «12 ,,, ,,, 12,1,, 21,2, "
Кроме того, вторая проблема заключается в том, что на некоторых устройствах запятая не отображается на цифровой клавиатуре (или требует многократного нажатия кнопки с точкой)
Вот мое обходное решение, которое решает упомянутые проблемы и позволяет пользователю вводить "." и ',', но в EditText он увидит единственный десятичный разделитель, соответствующий текущей локали:
И наблюдатель текста:
источник
Простое решение, сделайте настраиваемый элемент управления. (это сделано в Xamarin android, но должно легко переноситься на java)
источник
Вы можете использовать
inputType="phone"
, однако в этом случае вам придется иметь дело с несколькими,
или.
присутствующими, поэтому потребуется дополнительная проверка.источник
Я думаю, что это решение менее сложное, чем другие, написанные здесь:
Таким образом, когда вы нажмете "." в мягкой клавиатуре ничего не происходит; разрешены только цифры и запятая.
источник