Как установить inputfilter для edittext в android для decimal



У меня есть edittext, где я хочу ввести процентное значение, т. е. десятичное значение, поэтому я хочу ограничить пользователя вводить только значение меньше 100 в editText.



Пример: 1) если он хочет ввести значение больше 100, он не должен позволять ему вводить это.

2) если он хочет t0 ввести десятичное значение меньше 100 т. е. 50.5444 , то он должен позволить ему ввести это значение



Я также нашел Эту ссылку, где я могу установить фильтр для целочисленного значения максимум до 100, но это не позволяет мне ввести десятичное значение



Ссылка: http://tech.chitgoks.com/2011/06/27/android-set-min-max-value-an-edittext-accepts/



Кто-нибудь может мне помочь.

670   3  

3 ответов:

Эй, вы можете использоватьTextWatcher , применить его к вашему EditText и реализовать три метода, которые он предоставляет. Затем при вставке нового значения можно использовать регулярное выражение для проверки его правильности.

Надеюсь, это поможет!

Вот полный код реализации, который я использовал

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

На самом деле вы можете изменить полезный код sniplet, предоставленный по ссылке, упомянутой в вопросе, следующим образом. Кроме того, вы можете указать максимальное количество знаков после запятой, которое вы хотите иметь в процентах, и использовать сопоставитель шаблонов для возврата "", если входные данные не соответствуют предполагаемому шаблону.

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

Вы можете использовать его следующим образом:

new PercentageInputFilter((float) 0.00, (float) 100.00);

Comments

    Ничего не найдено.