Android:处理 InputFilter 上的退格键

标签 android android-edittext double android-input-filter

我为 EditText 组件创建了一个 InputFilter,它只允许在一个范围内(例如从 1.5 到 5.5)出现 double 值。一切正常,直到我删除了小数点:

我输入了 1.68,然后删除了小数点。文本域中的值变成了168,明显超出了范围。

这是我的过滤器的简化版本

public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
        if (isValid(dest.toString() + source.toString())) {
            //input is valid
            return null;
        }else{
          //The input is not valid
            return "";
        }
}
private boolean isValid(String input) {
    Double inputValue = Double.parseDouble(input);
    boolean isMinValid = (1.5 <= inputValue);
    boolean isMaxValid = (5.5 >= inputValue);

    return  isMinValid && isMaxValid;
}

最佳答案

我解决了我的问题。这是解决方案,以防其他人需要它:

public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
    if (isValid(dest.toString() + source.toString())) {
        //input is valid
        return null;
    }else{
      //The input is not valid
       if (source.equals("") && dest.toString().length() != 1) {
            //backspace was clicked, do not accept that change, 
            //unless user is deleting the last char
            CharSequence deletedCharacter = dest.subSequence(dstart, dend);
            return deletedCharacter;
        }
        return "";
    }

关于Android:处理 InputFilter 上的退格键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27151389/

相关文章:

android - 使用图像图标在 Facebook 上分享 Android 应用程序

android - OnFocusChange 并不总是有效

c - 为什么将某个short 转换为double 等于4004 位数字?

java - 有没有更好的方法将 Double 转换为其精确的十进制字符串?

android - 运行时错误膨胀 fragment

android - 使用 Maven 构建失败

android - 用于 Android 单元测试的 Java 注解处理(w/Dagger)

Android EditText边框背景色

java - 发送 EditText.getText() 到服务器。仅适用于单个单词。如何?

c++ - C++ 中的高斯积分不起作用。为什么?