配置Android EditText以允许小数和数字,不允许以'。'开头。或'00'和'000'等

时间:2016-06-14 09:56:36

标签: android android-edittext numbers decimal

我有一个Android EditText,我想让数字键盘出现。

如果我将shipping_information设置为subtotal,我会得到数字键盘以及键入小数和数字的功能。但是它可以输入subtotal其他,这不是我想要的,如果我在shipping_and_handling编译项目并且它按预期工作,但使用shipping_and_handling,这不是我的预期。 如何获得能够在base_grand_total中输入小数和数字的数字键盘?

1 个答案:

答案 0 :(得分:2)

发布我的建议有点迟,但是,我认为这可能有助于其他人。

输入类型设置为“NumberDecimal”,如android:inputType =“numberDecimal”(即,为了实现只有数字和小数点可用的keyborad),您可以设置输入过滤器以防止用户输入任何数字你不想要“.XX”,“00”等。请在下面找到这个例子。

    public class NumberDecimalInputFilter implements InputFilter {

    private int numbOfDigitsAfterDecimalPoint_;
    private boolean firstDigitIsZero_;

    public NumberDecimalInputFilter(int numbOfDigitsAfterDecimalPoint) {
        numbOfDigitsAfterDecimalPoint_ = numbOfDigitsAfterDecimalPoint;
    }

    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
        int dotPosition = -1;
        int desLength = dest.length();

        if (desLength == 0) {
            if (source.equals(".")) { //do not allow nothing preceding the dot
                return "";
            }
            firstDigitIsZero_ = source.equals("0") ? true : false;
        }

        if (firstDigitIsZero_ && desLength == 1 && !source.equals(".")) { //only allow a dot follows the first 0, i.e., to prevent 00, 01 or 001 ...
            return "";
        }

        for (int i = 0; i < desLength; i++) {
            char c = dest.charAt(i);
            if (c == '.' || c == ',') {
                dotPosition = i;
                break;
            }
        }
        if (dotPosition >= 0) {
            // protects against many dots
            if (source.equals(".") || source.equals(",")) {
                return "";
            }
            // if the text is entered before the dot
            if (dend <= dotPosition) {
                return null;
            }
            if (desLength - dotPosition > numbOfDigitsAfterDecimalPoint_) {
                return "";
            }
        }

        return null;
    }
}

用法 - 将编辑文本设置为仅允许小数点后的两位数。

EditTextInstance.setFilters(new InputFilter[] {new NumberDecimalInputFilter(2)});