comment définir uniquement la valeur numérique pour edittext dans Android?


209

J'ai un edittextdans lequel je veux que seules des valeurs entières soient insérées. Quelqu'un peut-il me dire quelle propriété je dois utiliser?

Réponses:


403

Je suppose que android:inputType="number"les attributs XML.


11
Mec, j'adore les développeurs Android ... une telle histoire pour obtenir cette option dans les pages Web!
Alex

14
Salut, dans Android 2.3.3, c'est "numberSigned". Je viens de l'écrire ici, au cas où quelqu'un le chercherait :)
Lemon Juice

Que faire si mon editText apparaît dans la boîte de dialogue et que, par conséquent, je le déclare uniquement en code .java? c'est-à-dire que la boîte de dialogue editText n'apparaît pas dans le fichier XML. Comment puis-je encore y parvenir?
Sibbs Gambling

1
De plus, vous pouvez utiliser android:inputType="phone"à la place de cela. Mais cela semble un peu plus "occupé".
Chad Bingham

126

Par exemple:

<EditText
android:id="@+id/myNumber"
android:digits="0123456789."
android:inputType="numberDecimal"
/>

3
C'est la meilleure solution !
RRTW

2
Je suppose que la chaîne doit être lue 0123456789.et non0123456780.
audiFanatic

Cela fonctionne aussi avec android: inputType = "number"! J'en avais besoin pour empêcher les utilisateurs de taper des opérateurs, des parenthèses, etc. sur le pavé numérique. Quel sauveur de vie, mec! Bienvenue chez Costco; Je t'aime!
gonzobrains

2
Cela ne vous permettra pas de mettre des nombres négatifs et en même temps cela permettra des doublons décimaux. (Ex: 1.1.1 .....)
Rushi Ayyappa

Bien, en ajoutant Android: les chiffres gèrent également le cas du copier-coller.
StoneLam

107

En code, vous pourriez faire

ed_ins.setInputType(InputType.TYPE_CLASS_NUMBER);

@MohamedKhamis c'est le nom de EditText
KERiii

1
Sourabh a demandé que "Seules les valeurs entières soient insérées". Cela permet de saisir beaucoup plus.
Zon

30

Pour saisir uniquement des chiffres, utilisez android:inputType="numberPassword"avec editText.setTransformationMethod(null);pour supprimer le masquage automatique du numéro.

OU

android:inputType="phone"

Pour la saisie des seuls chiffres, je pense que ces deux méthodes sont meilleures que android:inputType="number". La limitation de la mention de "nombre" comme type d'entrée est que le clavier permet de passer aux caractères et permet également de saisir d'autres caractères spéciaux. "numberPassword" inputType n'a pas ces problèmes car le clavier n'affiche que des chiffres. Même le type d'entrée "téléphone" fonctionne car le clavier ne vous permet pas de passer aux caractères. Mais vous pouvez toujours saisir quelques caractères spéciaux comme +, /, N, etc.

android: inputType = "numberPassword" avec editText.setTransformationMethod (null);

inputType = "numberPassword"

inputType = "téléphone"

inputType = "téléphone"

inputType = "nombre"

inputType = "nombre"


1
C'est parfait! android:inputType="numberPassword"aveceditText.setTransformationMethod(null);
coderpc

cette astuce rend ce que mon application est parfaite.
Kernelzero

6
android:inputType="numberDecimal"

5
C'est très bien, mais le système de nombres entiers n'inclut aucun nombre décimal.
RileyE

@RileyE Que voulez-vous dire par là? Nous venons juste de commencer à l'utiliser pour toutes nos entrées numériques et je veux m'assurer que nous ne manquons de rien. Merci!
Joshua Pinter


2

l'utilisation de ce qui suit peut mieux résoudre votre problème;

en xml:

<EditText
      android:id="@+id/age"
      android:inputType="numberDecimal|numberSigned"        />

ou // en activité dans etfield.addtextchangelistener

     private String blockCharacterSet="+(/)N,*;#";//declare globally
               try {
                for (int i = 0; i < s.length(); i++) {


                    if (blockCharacterSet.contains(s.charAt(i) + "")) {

                        String corrected_settempvalue = arrivalsettemp.substring(0, arrivalsettemp.length() - 1);
                        et_ArrivalSetTemp.setText(corrected_settempvalue);
                        if (corrected_settempvalue.length() != 0)
                            et_ArrivalSetTemp.setSelection(corrected_settempvalue.length());

                    }
                }
            } catch (Exception d) {
                d.printStackTrace();
            }

2

Si quelqu'un veut utiliser uniquement le numéro de 0 à 9 avec imeOptionsactiver, utilisez la ligne ci-dessous dans votreEditText

android: inputType = "nombre | aucun"

Cela n'autorisera que le nombre et si vous cliquez sur le bouton terminé / suivant du clavier, votre focus passera au champ suivant.


0

Vous pouvez l'utiliser en XML

<EditText
 android:id="@+id/myNumber"
 android:digits="123"
 android:inputType="number"
/>

ou,

android:inputType="numberPassword" along with editText.setTransformationMethod(null); to remove auto-hiding of the number.

ou,

android:inputType="phone"

Par programme, vous pouvez utiliser
editText.setInputType (InputType.TYPE_CLASS_NUMBER);


0

Je dois attraper en appuyant sur Entrée sur un clavier avec TextWatcher . Mais j'ai découvert que tous les claviers numériques android: inputType = "number" ou "numberDecimal" ou "numberPassword" etc. ne me permettent pas d'attraper Enter lorsque l'utilisateur appuie dessus.

J'ai essayé android:digits="0123456789\n"et tous les claviers numériques ont commencé à fonctionner avec Enter et TextWatcher.

Donc ma façon est:

android:digits="0123456789\n"
android:inputType="numberPassword"

plus editText.setTransformationMethod(null)

Merci à barmaley et abhiank.


0

Je ne sais pas quelle était la bonne réponse en '13, mais aujourd'hui c'est:

myEditText.setKeyListener(DigitsKeyListener.getInstance(null, false, true)); // positive decimal numbers

Vous obtenez tout, y compris le clavier à l'écran est un pavé numérique.

Presque tout. L'espresso, dans sa sagesse infinie, laisse typeText("...")inexplicablement contourner le filtre et entrer dans les poubelles ...


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.