Я пытаюсь форматировать значение, введенное в 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
почему состояние && (интермедиат) charSequence.toString(). Шар (0)> = 48 && (интермедиат) charSequence.toString(). Шар (0) <= 57, пожалуйста, объясните. Вместо Long.parseLong ((charSequence.toString())) я использовал Double и его работу отлично, но для разных языков. – Ramit
@ Уменьшить ограничение между '0' и' 9' –
Хорошо, у меня есть одна проблема. Вы устанавливаете текст в afterTextChanged, чтобы он снова вызывал afterTextChanged. Я не уверен, что символ валюты добавит начало или конец указанной валюты. Пожалуйста, следуйте @Shabbir ответ, чтобы сначала удалить textwatcher, а затем добавить его снова, чтобы предотвратить ненужный вызов изменения текста. – Ramit