So stellen Sie den Eingabefilter für edittext in Android auf dezimal ein
-
27-10-2019 - |
Frage
Ich habe einen Edittext, in den ich einen Prozentwert eingeben möchte, d. h. einen Dezimalwert. Daher möchte ich den Benutzer darauf beschränken, nur einen Wert unter 100 in den Bearbeitungstext einzugeben.
Beispiel: 1) Wenn er einen Wert von mehr als 100 eingeben möchte, sollte er nicht diesen eingeben dürfen.
2) Wenn er einen Dezimalwert von weniger als 100 eingeben möchte, d. h. 50.5444 , sollte es ihm ermöglichen, diesen Wert einzugeben
Ich habe auch diesen Link gefunden, über den ich den Filter für den Ganzzahlwert maximal auf 100 setzen kann, aber keinen Dezimalwert eingeben kann
Link: http://tech.chitgoks.com/2011/06/27/android-set-min-max-value-an-edittext-accepts/
Kann mir jemand helfen?
Lösung
Hey, Sie können den TextWatcher verwenden und ihn auf Ihren EditText
anwendenund implementieren Sie die drei bereitgestellten Methoden.Wenn Sie dann einen neuen Wert einfügen, können Sie mit einem RegEx dessen Gültigkeit überprüfen.
Hoffe es hilft!
Andere Tipps
Hier ist der vollständige Implementierungscode, den ich verwendet habe
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;
}
Sie können das hilfreiche Code-Sniplet, das unter dem in der Frage genannten Link bereitgestellt wird, wie folgt ändern.Optional können Sie auch die Anzahl der maximalen Dezimalstellen angeben, die der Prozentsatz haben soll, und den Pattern Matcher verwenden, um ""
zurückzugeben, wenn die Eingabe nicht mit dem beabsichtigten Muster übereinstimmt.
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;
}
}
Sie können es wie folgt verwenden:
new PercentageInputFilter((float) 0.00, (float) 100.00);