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?
Essayez d’utiliser TextView.setRawInputType () il correspond à l’attribut Android:inputType
.
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);
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.
mettre cette ligne dans xml
Android:inputType="number|numberDecimal"
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")
}
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!
EditText edit = new EditText(this);
edit.setHorizontallyScrolling(true);
edit.setInputType(EditorInfo.TYPE_NUMBER_FLAG_SIGNED|EditorInfo.TYPE_CLASS_NUMBER);
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);
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);
}