Wie andere sagten, habe ich diese Klasse in mein Projekt aufgenommen und den Filter auf gesetzt EditText
gewünschten Wert gesetzt.
Der Filter wird aus der Antwort von @ Pixel kopiert. Ich füge einfach alles zusammen.
public class DecimalDigitsInputFilter implements InputFilter {
Pattern mPattern;
public DecimalDigitsInputFilter() {
mPattern = Pattern.compile("([1-9]{1}[0-9]{0,2}([0-9]{3})*(\\.[0-9]{0,2})?|[1-9]{1}[0-9]{0,}(\\.[0-9]{0,2})?|0(\\.[0-9]{0,2})?|(\\.[0-9]{1,2})?)");
}
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
String formatedSource = source.subSequence(start, end).toString();
String destPrefix = dest.subSequence(0, dstart).toString();
String destSuffix = dest.subSequence(dend, dest.length()).toString();
String result = destPrefix + formatedSource + destSuffix;
result = result.replace(",", ".");
Matcher matcher = mPattern.matcher(result);
if (matcher.matches()) {
return null;
}
return "";
}
}
Stellen Sie nun den Filter EditText
so ein.
mEditText.setFilters(new InputFilter[]{new DecimalDigitsInputFilter()});
Hier ist eine wichtige Sache, die mein Problem löst, dass nicht mehr als zwei Ziffern nach dem Dezimalpunkt angezeigt werden dürfen. EditText
Das Problem ist jedoch, getText()
dass EditText
die gesamte eingegebene Eingabe zurückgegeben wird.
Nachdem EditText
ich den Filter über angewendet habe, habe ich beispielsweise versucht, den Eingang 1.5699856987 einzustellen. Auf dem Bildschirm wird also 1,56 angezeigt, was perfekt ist.
Dann wollte ich diese Eingabe für einige andere Berechnungen verwenden, um den Text aus diesem Eingabefeld ( EditText
) abzurufen . Als ich anriefmEditText.getText().toString()
anrief, gab es 1.5699856987 zurück, was in meinem Fall nicht akzeptabel war.
Also musste ich den Wert erneut analysieren, nachdem ich ihn von der erhalten hatte EditText
.
BigDecimal amount = new BigDecimal(Double.parseDouble(mEditText.getText().toString().trim()))
.setScale(2, RoundingMode.HALF_UP);
setScale
macht den Trick hier, nachdem der vollständige Text aus dem EditText
.