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

将Android EditText配置为允许小数和数字,不允许以';开头';或';00';和';000';等等,android,android-edittext,numbers,decimal,Android,Android Edittext,Numbers,Decimal,我有一个Android EditText,我想让数字键盘出现 如果我将android:inputType设置为numberdecimal | number,我就可以使用数字键盘,并能够输入十进制和数字。但它可以输入'.00222''0000',否则,这不是我想要的,如果我在安卓4.4.2上编译项目,它的工作符合我的预期,但使用安卓6.0,这不是我的预期。 你如何让数字键盘能够在安卓6.0中输入小数和数字?现在发布我的建议有点晚了,不过,我认为这可能会对其他人有所帮助 将输入类型设置为“Numbe

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

如果我将
android:inputType
设置为
numberdecimal | number
,我就可以使用数字键盘,并能够输入十进制和数字。但它可以输入
'.00222''0000'
,否则,这不是我想要的,如果我在
安卓4.4.2
上编译项目,它的工作符合我的预期,但使用
安卓6.0
,这不是我的预期。
你如何让数字键盘能够在安卓6.0中输入小数和数字?

现在发布我的建议有点晚了,不过,我认为这可能会对其他人有所帮助

将输入类型设置为“NumberDecimal”,如android:inputType=“NumberDecimal”(即,实现一个只有数字和小数点可用的键盘),您可以设置一个输入过滤器,以防止用户输入任何您不喜欢的数字“.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;
    }
}

现在发布我的建议有点晚了,但是,我认为它可能会帮助其他人

将输入类型设置为“NumberDecimal”,如android:inputType=“NumberDecimal”(即,实现一个只有数字和小数点可用的键盘),您可以设置一个输入过滤器,以防止用户输入任何您不喜欢的数字“.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;
    }
}

好了,除了验证输入之外没有别的方法了
android:inputType
只是一个提示。。。因为你可以在android上定制键盘,所以没有通用的方法来实现这一点。。。尝试自己验证每个文本更改的输入“如果我将android:inputType设置为numberdecimal | number,我就可以使用数字键盘并能够输入十进制和数字”——不一定。Android设备有数千种型号。这些设备附带数百个软键盘,用户可以从Play Store安装其他键盘。正如塞尔文所指出的,
android:inputType
是一个提示,而不是一个要求。每个键盘对所需的
inputType
所做的操作取决于键盘的开发人员,而不是您。您可以在edittext上设置textWatcher,并在afterTextChanged功能中检查输入。如果用户键入的字符不适合您的要求,请删除最后一个字符并将光标移回一个字符。AFAIK除了验证输入之外,没有其他方法
android:inputType
只是一个提示。。。因为你可以在android上定制键盘,所以没有通用的方法来实现这一点。。。尝试自己验证每个文本更改的输入“如果我将android:inputType设置为numberdecimal | number,我就可以使用数字键盘并能够输入十进制和数字”——不一定。Android设备有数千种型号。这些设备附带数百个软键盘,用户可以从Play Store安装其他键盘。正如塞尔文所指出的,
android:inputType
是一个提示,而不是一个要求。每个键盘对所需的
inputType
所做的操作取决于键盘的开发人员,而不是您。您可以在edittext上设置textWatcher,并在afterTextChanged功能中检查输入。如果用户键入任何不适合您需求的字符,请删除最后一个字符,并将光标移回一个字符。