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 EditTextso 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. EditTextDas Problem ist jedoch, getText()dass EditTextdie gesamte eingegebene Eingabe zurückgegeben wird.
Nachdem EditTextich 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);
setScalemacht den Trick hier, nachdem der vollständige Text aus dem EditText.