Décimales de limite dans EditText androïde
Bonjour,
Je suis nouveau à androïde et à l'essai d'écrire un $$etAPP que les aides vous contrôlent vos finances. J'emploie de ce fait un champ d'EditText où l'utilisateur peut spécifier une somme d'argent. Je place l'inputType à numberDecimal qui fonctionne très bien, sauf que ceci permet aux personnes d'introduire des nombres tels que 123,122 qui ne sont pas parfaites pour l'argent.
Y a-t-il une manière de limiter le nombre de caractères après la virgule décimale à deux ?
Merci vous infiniment des réponses
Cette exécution d'InputFilter résout le problème.
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.method.DigitsKeyListener;
public class MoneyValueFilter extends DigitsKeyListener {
public MoneyValueFilter() {
super(false, true);
}
private int digits = 2;
public void setDigits(int d) {
digits = d;
}
@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
CharSequence out = super.filter(source, start, end, dest, dstart, dend);
// if changed, replace the source
if (out != null) {
source = out;
start = 0;
end = out.length();
}
int len = end - start;
// if deleting, source is empty
// and deleting can't break anything
if (len == 0) {
return source;
}
int dlen = dest.length();
// Find the position of the decimal .
for (int i = 0; i < dstart; i++) {
if (dest.charAt(i) == '.') {
// being here means, that a number has
// been inserted after the dot
// check if the amount of digits is right
return (dlen-(i+1) + len > digits) ?
"" :
new SpannableStringBuilder(source, start, end);
}
}
for (int i = start; i < end; ++i) {
if (source.charAt(i) == '.') {
// being here means, dot has been inserted
// check if the amount of digits is right
if ((dlen-dend) + (end-(i + 1)) > digits)
return "";
else
break; // return new SpannableStringBuilder(source, start, end);
}
}
// if the dot is after the inserted part,
// nothing can break
return new SpannableStringBuilder(source, start, end);
}
}
Essai utilisant NumberFormat.getCurrencyInstance () pour composer votre ficelle avant que vous l'ayez mise dans un TextView.
Quelque chose aiment :
NumberFormat currency = NumberFormat.getCurrencyInstance();
myTextView.setText(currency.format(dollars));
Éditez - il n'y a aucun inputType pour la devise que je pourrais trouver dans les Doc.s. J'imagine que c'est parce qu'il y a quelques devises qui ne suivent pas la même règle pour les décimales, telles que Yens japonais.
Comme LeffelMania a mentionné, vous pouvez corriger l'utilisateur entré à l'aide du code ci-dessus avec un TextWatcher qui est placé sur votre EditText.
La réponse actuelle est correcte. Si vous vouliez empêcher l'utilisateur de saisir même de mauvaises données, vous pourriez ajouter un TextChangeListener et vérifier l'entrée contre une expression régulière chaque fois, remettant à zéro le texte au dernier exemple valide si l'utilisateur écrivait quelque chose invalide.