web-dev-qa-db-fra.com

Comment puis-je limiter mon entrée EditText à une entrée numérique (éventuellement décimale et signée)?

J'ai lu Android: Limiter EditText aux nombres et Comment puis-je afficher le clavier numérique sur un EditText dans Android? . Malheureusement, aucun d'entre eux ne semble répondre à mes besoins.

Je veux limiter mon entrée EditText à seulement des nombres. Cependant, je souhaite également autoriser les entrées signées et/ou décimales.

Voici mon code actuel (je dois le faire par programme):

EditText edit = new EditText(this);

edit.setHorizontallyScrolling(true);
edit.setInputType(InputType.TYPE_CLASS_NUMBER);

Avec cela, mon EditText restreint joyeusement toutes les entrées aux chiffres. Malheureusement, il ne permet rien d'autre, comme le point décimal.

Si je change cette ligne en edit.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL), l'EditText accepte toutes les entrées (ce qui n'est pas ce que je veux ...).

J'ai essayé de combiner des drapeaux (en désespoir de cause pour voir si cela fonctionnerait):

edit.setInputType(InputType.TYPE_CLASS_NUMBER);
edit.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL)
edit.setInputType(InputType.TYPE_NUMBER_FLAG_SIGNED)

Cela n'a pas fonctionné non plus (EditText a accepté toutes les entrées comme d'habitude).

Alors, comment je fais ça?

47
kibibyte

Essayez d’utiliser TextView.setRawInputType () il correspond à l’attribut Android:inputType.

56
Dan S

Il n'y a aucune raison d'utiliser setRawInputType(), utilisez simplement setInputType(). Cependant, vous devez combiner la classe et les indicateurs avec l'opérateur OR:

edit.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL | InputType.TYPE_NUMBER_FLAG_SIGNED);
156
Ralf

La meilleure façon de le faire par programme consiste à utiliser la méthode suivante:

public static DigitsKeyListener getInstance (boolean sign, boolean decimal) 

Renvoie un DigitsKeyListener qui accepte les chiffres de 0 à 9, plus le signe moins (uniquement au début) et/ou le point décimal (un seul par champ), le cas échéant.

Cela résout le problème des nombreux '.' dans EditText

editText.setKeyListener(DigitsKeyListener.getInstance(true,true)); // decimals and positive/negative numbers. 

editText.setKeyListener(DigitsKeyListener.getInstance(false,true)); // positive decimals numbers. 

editText.setKeyListener(DigitsKeyListener.getInstance(false,false)); // positive integer numbers.

editText.setKeyListener(DigitsKeyListener.getInstance(true,false)); // positive/negative integer numbers.
12
SerSánGal

mettre cette ligne dans xml

 Android:inputType="number|numberDecimal"
9
Qutbuddin Bohra

Utilisez ceci. Fonctionne bien

input.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL | InputType.TYPE_NUMBER_FLAG_SIGNED);
input.setKeyListener(DigitsKeyListener.getInstance("0123456789"));

MODIFIER

version kotlin

fun EditText.onlyNumbers() {
    inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL or
        InputType.TYPE_NUMBER_FLAG_SIGNED
    keyListener = DigitsKeyListener.getInstance("0123456789")
}
8
V. Kalyuzhnyu

Salut à tous j'ai aussi eu ce problème. J'utilise C # avec Xamarin

Juste une petite note que j'espère que quelqu'un d'autre aussi.

J'ai essayé plusieurs des méthodes mentionnées ici.

edittext1.SetRawInputType(Android.Text.InputTypes.ClassNumber | Android.Text.InputTypes.NumberFlagDecimal);

était le plus proche mais ne fonctionnait toujours pas. Comme Ralf l'a mentionné, vous pouvez utiliser

edit.setInputType (InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL | InputType.TYPE_NUMBER_FLAG_SIGNED);

Cependant, dans mon C #, je n'avais pas cela. à la place, vous le faites comme suit:

edittext1.InputType = Android.Text.InputTypes.ClassNumber | Android.Text.InputTypes.NumberFlagDecimal;

S'il vous plaît noter que l'ORDRE de ceux-ci est important. Si vous mettez Decimal en premier, cela vous permettra quand même de taper n'importe quel caractère, où Si Numer est le premier, il est seulement numérique, mais permet un séparateur décimal!

4
Marius Van Wyk
EditText edit = new EditText(this);

edit.setHorizontallyScrolling(true);
edit.setInputType(EditorInfo.TYPE_NUMBER_FLAG_SIGNED|EditorInfo.TYPE_CLASS_NUMBER);
2
Yasin Hassanien

Pour définir le type de saisie de EditText en décimal, utilisez ce code:

EditText edit = new EditText(this);
edit.SetRawInputType(Android.Text.InputTypes.NumberFlagDecimal | Android.Text.InputTypes.ClassNumber);
1
fulgen

ma solution:

   public void onTextChanged(CharSequence s, int start, int before, int count) {
   char ch=s.charAt(start + count - 1);
   if (Character.isLetter(ch)) {
       s=s.subSequence(start, count-1);
       edittext.setText(s);
    }
0
Meh yit