Как установить inputfilter для редактирования текста в Android для десятичной - PullRequest
2 голосов
/ 02 декабря 2011

У меня есть 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/

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

Ответы [ 3 ]

3 голосов
/ 02 декабря 2011

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

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

0 голосов
/ 19 июля 2018

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

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);
0 голосов
/ 03 декабря 2011

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

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