Android:在InputFilter上处理退格

时间:2014-11-26 14:17:05

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

我为EditText组件创建了一个InputFilter,它只允许范围内的双精度数(例如1.5到5.5)。一切正常,直到我删除了小数点:

我输入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;
}

2 个答案:

答案 0 :(得分:7)

我解决了我的问题。以下是其他人需要的解决方案:

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

}

答案 1 :(得分:0)

当您在编辑文本中输入完数据后,您必须触发知道您已完成输入数据,现在必须检查输入。 例如,通过添加输入测试按钮,或者例如当编辑文本字段失去焦点时。