0

Кнопка точка или запятая отключена, если нажата кнопка inputType = "number" или inputType = "number | Decimal". Он не работал с андроид: цифры = ".", также.Невозможно добавить десятичное значение с помощью EditText inputType = "number" Android

Редактирование содержит текстовый элемент, который форматирует число. Текст выглядит следующим образом:

mEditWithdrawalAmount.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) {} 

    @Override 
    public void afterTextChanged(Editable s) { 

     if (!s.toString().equals(current)) { 
      mEditWithdrawalAmount.removeTextChangedListener(this); 

      String replaceable = String.format("[%s .\\s]", NumberFormat.getCurrencyInstance().getCurrency().getSymbol()); 
      String cleanString = s.toString().replaceAll(replaceable, "").replace("R","").replace(",",""); 
      double parsed; 
      try { 
       parsed = Double.parseDouble(cleanString); 
      } catch (NumberFormatException e) { 
       parsed = 0.00; 
      } 

      String formatted = Utils.formatCurrency(parsed); 

      current = formatted; 
      mEditWithdrawalAmount.setText(formatted); 
      mEditWithdrawalAmount.setSelection(formatted.length()); 

      // Do whatever you want with position 
      mEditWithdrawalAmount.addTextChangedListener(this); 
     } 
    } 
}); 

Проблема заключается в том, что edittext также должен содержать числа с десятичной точкой.

  • Фактический результат: R1000 000
  • Желаемый результат R1000 000,00 или R1000 000,40
+0

В вашем XML editext андроида: inputType = "numberDecimal" –

+0

андроид: inputType = "numberDecimal" работает только без onTextChange Слушатель – BigWiz

ответ

0

Эй проверить этот код.

android:inputType="numberDecimal" 

Надеюсь, что эта помощь.

+0

не работает с андроидом: inputType = "numberDecimal" – BigWiz

+0

вы можете быть более конкретным, что вы хотите ? –

0

Вы можете использовать входной фильтр, как это:

InputFilter filter = new InputFilter() { 
     public CharSequence filter(CharSequence source, int start, int end, 
            Spanned dest, int dstart, int dend) { 
      if(source.equals("")){ // for backspace 
       return source; 
      } 

      if(source.toString().matches("[0-9.]+")){ 
       return source; 
      } 
      return ""; 
     } 
    }; 

Затем установите его на редактирования текста

topedittext.setFilters(new InputFilter[] { filter,new InputFilter.LengthFilter(30) }); 
0

попробовать это: это пример кода

amountEditText.setRawInputType(Configuration.KEYBOARD_12KEY); 
    amountEditText.addTextChangedListener(new TextWatcher() { 
     public void afterTextChanged(Editable s) {} 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 

     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      if(!s.toString().matches("^\\$(\\d{1,3}(\\,\\d{3})*|(\\d+))(\\.\\d{2})?$")) 
      { 
       String userInput= ""+s.toString().replaceAll("[^\\d]", ""); 
       StringBuilder cashAmountBuilder = new StringBuilder(userInput); 

       while (cashAmountBuilder.length() > 3 && cashAmountBuilder.charAt(0) == '0') { 
        cashAmountBuilder.deleteCharAt(0); 
       } 
       while (cashAmountBuilder.length() < 3) { 
        cashAmountBuilder.insert(0, '0'); 
       } 
       cashAmountBuilder.insert(cashAmountBuilder.length()-2, '.'); 
       cashAmountBuilder.insert(0, '$'); 

       amountEditText.setText(cashAmountBuilder.toString()); 
       // keeps the cursor always to the right 
       Selection.setSelection(amountEditText.getText(), cashAmountBuilder.toString().length()); 

      } 

     } 
    }); 

или этот он работает для меня

Я реализовал все в onFocusChangedListener. Также не забудьте установить тип ввода EditText на «number | numberDecimal».

Изменения: Если ввод пуст, замените его на «0.00». Если вход имеет более двух десятичных значений точности, то отбрасывается до двух десятичных знаков. Небольшой рефакторинг.

editText.setOnFocusChangeListener(new OnFocusChangeListener() { 
@Override public void onFocusChange(View v, boolean hasFocus) { 
    if (!hasFocus) { 
     String userInput = ET.getText().toString(); 

     if (TextUtils.isEmpty(userInput)) { 
      userInput = "0.00"; 
     } else { 
      float floatValue = Float.parseFloat(userInput); 
      userInput = String.format("%.2f",floatValue); 
     } 

     editText.setText(userInput); 
    } 
} 
}); 
Смежные вопросы