【问题标题】:Configure Android EditText to allow decimals and number,not allow begin with '.' or '00' and '000' and so on将 Android EditText 配置为允许小数和数字,不允许以 '.' 开头或“00”和“000”等等
【发布时间】:2016-06-14 09:56:35
【问题描述】:

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

如果我将android:inputType 设置为numberdecimal|number,我将获得数字键盘以及输入小数和数字的能力。但它可以输入'.00222''0000'else,这不是我想要的,如果我在android 4.4.2 编译项目并且它可以正常工作,但是使用Android 6.0,这不是我的预期。 如何获得能够在Android 6.0 中输入小数和数字的数字键盘?

【问题讨论】:

  • AFAIK 除了验证输入之外别无他法...android:inputType 只是一个提示...而且由于您可以在 android 上使用自定义键盘,因此没有通用的方法可以做到这一点.. . 尝试自己验证每个文本更改的输入
  • “如果我将 android:inputType 设置为 numberdecimal|number,我将获得数字键盘以及输入小数和数字的能力”——不一定。有数千种 Android 设备型号。它们附带数百个软键盘,用户可以从 Play 商店安装其他软键盘。正如 Selvin 所说,android:inputType 是一个提示,而不是一个要求。每个键盘对您想要的inputType 的作用取决于键盘的开发人员,而不是您
  • 您可以在 edittext 上设置 textWatcher 并在 afterTextChanged 函数中检查输入。如果用户键入任何不适合您需求的字符,则删除最后一个字符并将光标移回一个字符。

标签: android android-edittext numbers decimal


【解决方案1】:

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

将输入类型设置为“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;
    }
}

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

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

【讨论】:

    猜你喜欢
    • 2011-11-24
    • 2022-11-11
    • 1970-01-01
    • 2018-05-24
    • 2014-02-15
    • 2019-04-23
    • 2017-10-15
    • 2021-02-07
    • 1970-01-01
    相关资源
    最近更新 更多