如何在android中为decimaltext设置inputfilter for decimal

时间:2011-12-02 09:17:58

标签: android android-edittext input-filtering

我有edittext,我想输入百分比值,即小数值,所以我想限制用户在editText中只输入小于100的值。

示例:1)如果他想输入超过100的不应允许他输入此内容。

2)如果他想要输入十进制值小于100,即50.5444 那么应该允许他输入此值

我还找到此链接,我可以将整数值的最大值设置为100,但不允许我输入小数值

link:http://tech.chitgoks.com/2011/06/27/android-set-min-max-value-an-edittext-accepts/

任何人都可以帮助我。

3 个答案:

答案 0 :(得分:3)

嘿,您可以使用TextWatcher,将其应用于EditText并实施其提供的三种方法。然后,当您插入新值时,可以使用RegEx检查其有效性。

希望它有所帮助!

答案 1 :(得分:0)

以下是我使用的完整实施代码

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

答案 2 :(得分:0)

您实际上可以如下修改问题中提到的链接中提供的有用代码段。另外,您也可以选择包含希望百分比包含的最大小数位数,如果输入与预期的模式不匹配,则使用模式匹配器返回""

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