0

Я хочу создать Eddittext для ввода значений валюты с двумя десятичными знаками слева направо. Если there's никакого значения не показывает 0.00, а также пользовательских типов текста следует изменить acording по этим правилам: Input rulesAndroid обратный денежный ввод с фиксированным десятичным числом

I've пытался получить это сделать, используя TextWatcher как в аналогичный вопрос, но я не смог сделать это поскольку он продолжал вызывать TextWatcher после обновления текста.

+0

что вы хотите в качестве вывода ? – Sangeeta

+0

Я обновляю свой вопрос, давая понять, что его Edittext и я хочу, чтобы текст формировался как пользовательский тип на нем. – IBueno

+0

ОК .. у меня возникла ваша проблема, скоро опубликую мой ответ. – Sangeeta

ответ

0

я, наконец, получил это работает так же, как я хотел, используя TextWatcher с этим кодом, надеюсь, это поможет кому-то:

 @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      if ((count - before) > 0) { 
       String text = s.toString().replace(',', '.'); 
       text = text.replace("..", "."); 
       if (text.equals(".")) { 
        text = "0,00"; 
        amount_field.setText(text); 
        amount_field.setSelection(2); 

       } else { 
        int counter = 0; 
        for (int i = 0; i < text.length(); i++) { 
         if (text.charAt(i) == '.') { 
          counter++; 
          if (counter > 1) { 
           break; 
          } 
         } 
        } 

        if (counter > 1) { 
         StringBuilder sb = new StringBuilder(text); 
         sb.deleteCharAt(start); 
         amount_field.setText(sb.toString().replace('.', ',')); 
         amount_field.setSelection(start); 

        } else { 
         Float value = Float.valueOf(text); 
         String result = String.format("%.2f", value); 
         amount_field.setText(result.replace('.', ',')); 
         if (start != result.length()) { 
          amount_field.setSelection(start + 1); 
         } else { 
          amount_field.setSelection(start); 
         } 
        } 
       } 
      } 
     } 
0

Попробуйте это:

String yourStringToPutIntoTextView = String.format("%.2f", YourFloat); 

Вот пример:

List<Float> listTestValue = new ArrayList<Float>(); 
listTestValue.add(new Float(10)); 
listTestValue.add(new Float(10.10)); 
listTestValue.add(new Float(1010)); 
listTestValue.add(new Float(0)); 
listTestValue.add(new Float(0.9)); 
listTestValue.add(new Float(.12)); 
listTestValue.add(new Float(0.01)); 
for(Float f : listTestValue) 
{ 
    String s = String.format("%.2f", f); 
    System.out.println(s); 
} 

Если у вас есть формат noInput строку с F = 0, как это:

String noInput = String.format("%.2f", (float)0); 

Обратите внимание, что значения Должен быть Float!

Выход:

10,00

10,10

1010,00

0,00

0,90

0,12

0,01

+0

Спасибо за ответ, но я просил изменить значения при вводе их в Edittext, а не в функцию со входом и выходом. – IBueno

+0

Да, но вы можете изменить значение на значение EditText, с помощью этого метода, если у вас нет никаких идей об этом, я могу обновить код для вас –

+1

Он отлично работает как функция с вводом и выводом, но имеет дело с Textwatcher в Edittext возникают проблемы с размещением курсора после изменения текста, бесконечных циклов и так далее. – IBueno