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?

War es hilfreich?

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);

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top