Comment mettre InputFilter pour edittext dans Android pour décimal
-
27-10-2019 - |
Question
Je edittext où je veux entrer la valeur en pourcentage de la valeur i.e. décimales, donc je veux limiter l'utilisateur d'entrer seulement valeur inférieure à 100 dans le editText.
Exemple:. 1) s'il veut entrer valeur plus de 100 , il ne devrait pas lui permettre pour entrer dans cette
2) S'il veut entrer t0 valeur décimale inférieure à 100 i.e. 50,5444 il devrait lui permettre pour entrer cette valeur
Je l'ai aussi trouvé ce lien où je peux installer le filtre pour un maximum de valeur entière à 100, mais sa ne me permettant pas d'entrer la valeur décimale
lien: http : //tech.chitgoks.com/2011/06/27/android-set-min-max-value-an-edittext-accepts/
aide quelqu'un peut me.
La solution
Hey vous pouvez utiliser le TextWatcher , l'appliquer à votre EditText
et mettre en œuvre les trois méthodes qu'il fournit. Ensuite, lorsque vous insérez une nouvelle valeur, vous pouvez utiliser une expression régulière pour vérifier sa validité.
it helps!
Autres conseils
Voici le code I complet de mise en œuvre utilisé
editTextSpLinePercent.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
String enteredValue = s.toString();
if(checkNullValues(enteredValue)) {
if(Float.parseFloat(enteredValue.trim()) >100.0f){
AlertDialog.Builder builder = new AlertDialog.Builder(SpecialDiscountLineActivity.this);
// builder.setCancelable(true);
builder.setMessage("Percentage Value should be Less than 100");
builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
editTextSpLinePercent.setText("");
}
});
builder.show();
}
}
}
});
public static boolean checkNullValues(String valueToCheck) {
//Log.i("Log","CheckForNullValues : "+valueToCheck);
if(!(valueToCheck == null)) {
String valueCheck = valueToCheck.trim();
if(valueCheck.equals("") || valueCheck.equals("0") ) {
// Log.i("Log","Returning false 0 or Blank");
return false;
}
return true;
}
//Log.i("Log","Returning false null");
return false;
}
Vous pouvez modifier réellement le code utile sniplet fourni dans le lien mentionné dans la question comme suit. le cas échéant vous pouvez également inclure le nombre de décimales max vous voulez que le pourcentage d'avoir et d'utiliser le modèle pour matcher retour ""
si l'entrée ne correspond pas au modèle prévu.
private class PercentageInputFilter implements InputFilter {
private float min;
private float max;
PercentageInputFilter(float min, float max) {
this.min = min;
this.max = max;
}
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
try {
// Get input
String stringToMatch = dest.toString() + source.toString();
float input = Float.parseFloat(stringToMatch);
// Check if the input is in range.
if (isInRange(min, max, input)) {
// return null to accept the original replacement in case the format matches and text is in range.
return null;
}
} catch (NumberFormatException nfe) {
}
return "";
}
private boolean isInRange(float min, float max, float input) {
return input >= min && input <= max;
}
}
Vous pouvez l'utiliser comme:
new PercentageInputFilter((float) 0.00, (float) 100.00);