Ich versuche Format eines Wertes in einem EditText
eingegeben, muss dies sofort geschehen, dh sobald der Benutzer Wert in EditText
eingibt, muss die Anwendung den Wert formatieren und setzen zum EditText
wieder. Mein Code ist nicht korrekt, und ich kann keine Möglichkeit findet Nummer rechtzeitigAndroid Format Wert Währung, wenn Benutzer Typ Nummer auf 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 zu forma
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);
}
dieser Code Arbeit bis Formatnummer, wenn mein EditText formatiert gelöscht und ich weiß nicht, was Problem,
Mein Log:
E/yourFormattedString: 1
E/yourFormattedString: 11
E/yourFormattedString: 111
E/yourFormattedString: 1,111
E/yourFormattedString: 1
warum Bedingung && (int) charSequence.toString(). CharAt (0)> = 48 && (int) charSequence.toString(). CharAt (0) <= 57, bitte erläutern. Anstelle von Long.parseLong ((charSequence.toString())) habe ich Double verwendet und es funktioniert gut, aber für ein anderes Gebietsschema. – Ramit
@Ramit Begrenzung zwischen '0' und '9' –
Ok, ich habe ein Problem. Sie setzen den Text in afterTextChanged, so dass er nach afterThangeChanged erneut aufgerufen wird. Ich bin nicht sicher, dass das Währungssymbol Anfang oder Ende für erwähnte Währung hinzufügen wird. Bitte folgen @ Shabbir Antwort, um Textwatcher zuerst zu entfernen und dann fügen Sie es erneut, um unnötigen Aufruf von Textänderung zu verhindern – Ramit