2016-08-22 2 views
0

Я пытаюсь форматировать значение, введенное в EditText, это должно произойти немедленно, то есть, как только пользователь вводит значение в , приложение должно отформатировать значение и установить его к EditText снова. Мой код не является правильным, и я не могу найти способ форматирования номер на времяВалюта валютного формата Android, когда пользователь вводит номер в EditText

transfer_amount.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) { 
    } 
    @Override 
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 
    } 
    @Override 
    public void afterTextChanged(Editable charSequence) { 
     if (charSequence.toString().length() == 1 && charSequence.toString().equals("0")) { 
      transfer_amount.setText(""); 
     } else if (charSequence.toString().length() > 0 && (int) charSequence.toString().charAt(0) >= 48 && (int) charSequence.toString().charAt(0) <= 57) { 
      Locale swedish = new Locale("sv", "SE"); 
      NumberFormat swedishFormat = NumberFormat.getCurrencyInstance(swedish); 
      transfer_amount.setText(swedishFormat.format(Long.parseLong((charSequence.toString())))); 
     } 
    } 
}); 

UPDATE

public void onTextChanged(CharSequence s, int start, int before, int count) { 
    long enteredNumber = Long.parseLong(s.toString().replace(",", "")); 
    transfer_amount.removeTextChangedListener(this); 
    DecimalFormat formatter   = new DecimalFormat("#,###,###"); 
    String  yourFormattedString = formatter.format(enteredNumber); 
    Log.e("yourFormattedString ", yourFormattedString); 
    transfer_amount.setText(yourFormattedString); 
    transfer_amount.addTextChangedListener(this); 
} 

этот код работать до номера формата, когда отформатировал EditText очищается, и я не знаю, Что проблема,

Мой Журнал:

E/yourFormattedString: 1 
E/yourFormattedString: 11 
E/yourFormattedString: 111 
E/yourFormattedString: 1,111 
E/yourFormattedString: 1 
+0

почему состояние && (интермедиат) charSequence.toString(). Шар (0)> = 48 && (интермедиат) charSequence.toString(). Шар (0) <= 57, пожалуйста, объясните. Вместо Long.parseLong ((charSequence.toString())) я использовал Double и его работу отлично, но для разных языков. – Ramit

+0

@ Уменьшить ограничение между '0' и' 9' –

+0

Хорошо, у меня есть одна проблема. Вы устанавливаете текст в afterTextChanged, чтобы он снова вызывал afterTextChanged. Я не уверен, что символ валюты добавит начало или конец указанной валюты. Пожалуйста, следуйте @Shabbir ответ, чтобы сначала удалить textwatcher, а затем добавить его снова, чтобы предотвратить ненужный вызов изменения текста. – Ramit

ответ

0

для выполнения изменения текста вы должны заботиться о исходная строка и измененная строка.

tt = new TextWatcher() { 
     public void afterTextChanged(Editable s) { 
      if(s.length()!=0) { 
       long enteredNumber = Long.parseLong(s.toString().replace(",", "")); 
       nameEdit.removeTextChangedListener(this); 
       DecimalFormat formatter = new DecimalFormat("#,###,###"); 
       String yourFormattedString = formatter.format(enteredNumber); 
       Log.e("yourFormattedString ", yourFormattedString); 
       nameEdit.setText(yourFormattedString); 
       nameEdit.addTextChangedListener(this); 
       nameEdit.setSelection(yourFormattedString.length()); 
      } 
     } 

     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
     } 

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

     } 
    }; 
    nameEdit.addTextChangedListener(tt); 
+0

после значения формата, причина моего очищения 'edittext', мой пост обновлен –

+0

ли это печать LOG –

+0

пост с результатом Logcat –

Смежные вопросы