Comme d'autres l'ont dit, j'ai ajouté cette classe à mon projet et défini le filtre sur EditText
Je veux.
Le filtre est copié à partir de la réponse de @ Pixel. Je mets juste tout ça ensemble.
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 "";
}
}
Maintenant, définissez le filtre dans votre EditText
comme ça.
mEditText.setFilters(new InputFilter[]{new DecimalDigitsInputFilter()});
Ici, une chose importante est que cela résout mon problème de ne pas permettre d'afficher plus de deux chiffres après la virgule décimale, EditText
mais le problème est que lorsque je à getText()
partir de cela EditText
, il renvoie toute l'entrée que j'ai tapée.
Par exemple, après avoir appliqué le filtre sur le EditText
, j'ai essayé de définir l'entrée 1.5699856987. Donc, sur l'écran, il affiche 1,56, ce qui est parfait.
Ensuite, j'ai voulu utiliser cette entrée pour d'autres calculs, donc je voulais obtenir le texte de ce champ d'entrée ( EditText
). Quand j'ai appelémEditText.getText().toString()
il renvoie 1.5699856987, ce qui n'était pas acceptable dans mon cas.
J'ai donc dû analyser à nouveau la valeur après l'avoir obtenue à partir du fichier EditText
.
BigDecimal amount = new BigDecimal(Double.parseDouble(mEditText.getText().toString().trim()))
.setScale(2, RoundingMode.HALF_UP);
setScale
fait l'affaire ici après avoir récupéré le texte intégral du EditText
.