Intereting Posts
Java.lang.NullPointerException: попытка вызвать виртуальный метод 'android.view.View .MainActivity.findViewById (int)' для ссылки на нулевой объект TableLayout – удаление места между столбцами Android Expansion apk Неразрешенная зависимость от sbt-android-plugin 0.6.0-SNAPSHOT? Принудительное приложение для обновления, когда новая версия приложения доступна в магазине воспроизведения Android. Атрибут «пустой» не работает, как ожидалось, с помощью SimpleFramework Джек не работает на Preview 4 с ошибкой com / android / jack / api / v03 / Api03Config SetImageBitmap не имеет видимого эффекта Airpush для Android – Что такое факт и какой миф? SetCompoundDrawables Перетаскивание текста EditText Использование MultiDexApplication приводит к тому, что тест Robolectric для класса приложения прерывается Как решить «Этот элемент не имеет прикрепленного источника и Javadoc не может быть найден в прикрепленном Javadoc»? Android Google Maps v2 не показывает значок компаса и местоположения Как создать ключ RSA ключей хранилища Android с бесконечной достоверностью? Android-добавление вида к макету, заставляя макет находиться перед ActionBar

EditText с форматом валюты

У меня есть EditText, в котором я хочу отобразить валюту:

input.setInputType(InputType.TYPE_CLASS_NUMBER); input.addTextChangedListener(new CurrencyTextWatcher()); 

с:

 public class CurrencyTextWatcher implements TextWatcher { boolean mEditing; public CurrencyTextWatcher() { mEditing = false; } public synchronized void afterTextChanged(Editable s) { if(!mEditing) { mEditing = true; String digits = s.toString().replaceAll("\\D", ""); NumberFormat nf = NumberFormat.getCurrencyInstance(); try{ String formatted = nf.format(Double.parseDouble(digits)/100); s.replace(0, s.length(), formatted); } catch (NumberFormatException nfe) { s.clear(); } mEditing = false; } } 

Я хочу, чтобы пользователь увидел клавиатуру с номером, поэтому я звоню

 input.setInputType(InputType.TYPE_CLASS_NUMBER); 

На моем EditText. Однако это не сработает. Я вижу цифры как введенные без форматирования. НО: Если я НЕ устанавливаю inputType через input.setInputType (InputType.TYPE_CLASS_NUMBER), форматирование работает отлично. Но пользователь должен использовать обычную клавиатуру, что не очень приятно. Как я могу использовать цифровую клавиатуру, а также видеть правильное форматирование валюты в моем EditText? Благодарю.

Solutions Collecting From Web of "EditText с форматом валюты"

Лучше использовать интерфейс InputFilter. Гораздо проще обрабатывать любые входы с помощью регулярного выражения. Мое решение для формата ввода валюты:

 public class CurrencyFormatInputFilter implements InputFilter { Pattern mPattern = Pattern.compile("(0|[1-9]+[0-9]*)?(\\.[0-9]{0,2})?"); @Override public CharSequence filter( CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { String result = dest.subSequence(0, dstart) + source.toString() + dest.subSequence(dend, dest.length()); Matcher matcher = mPattern.matcher(result); if (!matcher.matches()) return dest.subSequence(dstart, dend); return null; } } 

Действительно: 0,00, 0,0, 10,00, 111,1
Неверно: 0, 0.000, 111, 10, 010.00, 01.0

Как использовать:

 editText.setFilters(new InputFilter[] {new CurrencyFormatInputFilter()}); 

Попробуйте добавить это свойство в ваше объявление xml для редактирования текста:

android:inputType="numberDecimal" или число или номер android:inputType="numberDecimal"

Подробнее о android:inputType .