web-dev-qa-db-fra.com

Comment déterminer si une entrée dans EditText est un entier?

Bonjour, je suis un débutant en programmation Android.

J'essaie de créer une activité qui inclut un champ edittext et un button. Lorsque l'utilisateur saisit un entier, le bouton le mènera à l'activité suivante. Cependant, je ne le fais pas s'il existe un moyen de vérifier le type de saisie de l'utilisateur.

Est-ce que quelqu'un peut m'aider? Merci beaucoup!

13
Yansuck
String text = editText123.getText().toString();
try {
   int num = Integer.parseInt(text);
   Log.i("",num+" is a number");
} catch (NumberFormatException e) {
   Log.i("",text+" is not a number");
}
28
Mark Pazon

Depuis le niveau 1 de l'API, Android fournit une méthode d'assistance pour faire exactement cela (pas besoin d'utiliser regex ou catching exception): TextUtils.isDigitsOnly (CharSequence str)

boolean digitsOnly = TextUtils.isDigitsOnly(editText.getText());

Notez que cette méthode retourne true avec une chaîne vide: Issue 24965

40
jmaffre

Si vous voulez qu'EditText n'accepte que des chiffres, vous ne pouvez pas spécifier Android:inputType="number" dans le fichier de présentation.

10
muffinmad

Vous pouvez utiliser TextWatcher pour EditText pour obtenir la valeur de chaque modification de EditText.Vous devez ajouter une interface à TextWatcher dans votre activité.

 mEditText.addTextChangedListener(Your Class Name.this);

on dans la méthode de TextWatcher

     @Override
public void afterTextChanged(Editable s) {
    Log.v("Log_tag", "After TextChanged" + s.toString());

}

@Override
public void beforeTextChanged(CharSequence s, int start, int count,
        int after) {
    Log.i("Log_tag", "Before TextChanged" + s.toString());

}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
    Log.e("Log_tag", "ontext Changed" + s.toString());
    //you can match here s with number or integer 
             if(isNumeric( s.toString())){
                      //it is number     
               }
    }


 public static boolean isNumeric(String str)
 {
    return str.matches("-?\\d+(.\\d+)?");
  }
4
Herry

Essayez cette solution.

Vous devez ajouter les propriétés Android:nextFocusDown="@+id/nextedittext_id" et Android:singleLine="true" dans vos éditions.

Par exemple:

<EditText
        Android:id="@+id/ed1"
        Android:layout_width="200dp"
        Android:nextFocusDown="@+id/ed2"
         Android:singleLine="true"
        Android:layout_height="wrap_content" />


 <EditText
        Android:id="@+id/ed2"
        Android:layout_width="200dp"
        Android:layout_height="wrap_content"
        Android:singleLine="true"
        Android:layout_below="@+id/ed1" />

Et ajoutez le code suivant dans votre activité:

 editText1.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                String value=s.toString();
                    if(isNumeric(value)){
                        if(Integer.parseInt(value)>=100){
                            editText1.setFocusableInTouchMode(true);
                            editText1.setFocusable(false);
                        }
                }
            }

            @Override
            public void afterTextChanged(Editable s) {
            }
        });
        editText2.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                editText1.setFocusableInTouchMode(true);
                editText1.setFocusable(true);
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });

la méthode isNumeric est la même que ci-dessus:

 public static boolean isNumeric(String str)
    {
        return str.matches("-?\\d+(.\\d+)?");
    }
1
SAAM

Le code suivant peut être utilisé pour déterminer les chiffres, 

boolean isDigits = TextUtils.isDigitsOnly(edtDigits.getText().toString());

Cependant, puisque cette méthode retourne true avec String vide, vous pouvez donc valider la chaîne vide comme suit:

public boolean isDigits(String number){ 
   if(!TextUtils.isEmpty(number)){
       return TextUtils.isDigitsOnly(number);
   }else{
       return false;
   }
}
1
Yuvraj Pandey

J'ai trouvé une solution beaucoup plus propre, qui vérifie si la chaîne est un type de nombre comprenant integer, float, long ou double

import Java.math.BigDecimal;

Boolean isNumber;

try {
    BigDecimal n = new BigDecimal(theStingToCheck);
    isNumber = true;
} catch (Exception e) {
    isNumber = false;
}
1
Ikky