如何只允许TextWatcher中的EditText中的偶数?

时间:2016-01-12 16:04:36

标签: android textwatcher

我需要在EditText中仅输入0到20之间的偶数。但是,当我按下按键时,' 1'和' 2'给12分,它给了我一个Toast我的输入无效,然后才按下按键' 2'。

Textwatcher

public void afterTextChanged(Editable s) {
  try {
    int val = Integer.parseInt(s.toString());
    if (val > 20) {
      s.replace(0, s.length(), "20", 0, 2);
    } else if (val < 0) {
      s.replace(0, s.length(), "0", 0, 1);
    } else if (val == 1) {
      s.replace(0, s.length(), "1", 0, 2);
    } else if (val == 3) {
      s.replace(0, s.length(), "3", 0, 2);
    } else if (val == 5) {
      s.replace(0, s.length(), "5", 0, 2);
    } else if (val == 7) {
      s.replace(0, s.length(), "7", 0, 2);
    } else if (val == 9) {
      s.replace(0, s.length(), "9", 0, 2);
    } else if (val == 11) {
      s.replace(0, s.length(), "11", 0, 2);
    } else if (val == 13) {
      s.replace(0, s.length(), "13", 0, 2);
    } else if (val == 15) {
      s.replace(0, s.length(), "15", 0, 2);
    } else if (val == 17) {
      s.replace(0, s.length(), "17", 0, 2);
    } else if (val == 19) {
      s.replace(0, s.length(), "19", 0, 2);
    }
  } catch (NumberFormatException ex) {
    Toast.makeText(MainActivity.this,"invalid!",Toast.LENGTH_LONG).show();
  }
}
});

1 个答案:

答案 0 :(得分:1)

你几乎每个号码都会收到一个afterTextChanged电话,所以目前你永远无法写12个。

最好的方法是在用户继续操作后进行验证(失去焦点,按下另一个项目),并在格式正确的情况下提醒他们。

或者你可以在几秒钟后开始runnable检查它。

至于改变它,会更容易做到

public void postUpdateValidate(int val){
    if(val % 2 == 1){ //Checks to see if the remainder is 1 after dividing by 2
      val++;
    }
    if(val > 20){
      val = 20;
    }
    if(val % 0){
      val = 0;
    }
    edittext.setText("" + val);
}