java - Edittext如何只接受小数点后两位数

标签 java android android-edittext android-textwatcher

我试图在 EditText 中输入的小数点后仅添加两个数字。

所以我实现了一个 TextWatcher 来在输入期间检查 string

我在下面使用的函数效果惊人,但有一个主要缺陷。当您输入任何值时,然后添加一个小数点,删除该小数点并继续添加更多值,仅接受 3 个值作为输入。

案例:我输入了 300. 但后来我意识到我想输入 3001234567,所以我删除了小数点 . 并继续将1234567 添加到300,只有123 将被接受,其余的将被忽略。

我该如何处理?任何建议将不胜感激。

我的代码:

 price.addTextChangedListener(new TextWatcher() {
     public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {

     }

     public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {

     }

     public void afterTextChanged(Editable arg0) {
         if (arg0.length() > 0) {
             String str = price.getText().toString();
             price.setOnKeyListener(new View.OnKeyListener() {
                 public boolean onKey(View v, int keyCode, KeyEvent event) {
                     if (keyCode == KeyEvent.KEYCODE_DEL) {
                         count--;
                         InputFilter[] fArray = new InputFilter[1];
                         fArray[0] = new InputFilter.LengthFilter(100);
                         price.setFilters(fArray);
                         //change the edittext's maximum length to 100.
                         //If we didn't change this the edittext's maximum length will
                         //be number of digits we previously entered.
                     }
                     return false;
                 }
             });
             char t = str.charAt(arg0.length() - 1);
             if (t == '.') {
                 count = 0;
             }
             if (count >= 0) {
                 if (count == 2) {
                     InputFilter[] fArray = new InputFilter[1];
                     fArray[0] = new InputFilter.LengthFilter(arg0.length());
                     price.setFilters(fArray);
                     //prevent the edittext from accessing digits
                     //by setting maximum length as total number of digits                               we typed till now.
                 }
                  count++;
              }
          }
      }
  });

最佳答案

试试这个:

@Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
             String input = s.toString();
            if(input.contains(".") && s.charAt(s.length()-1) != '.'){
                if(input.indexOf(".") + 3 <= input.length()-1){
                    String formatted = input.substring(0, input.indexOf(".") + 3);
                    editReceiver.setText(formatted);
                    editReceiver.setSelection(formatted.length());
                }
            }else if(input.contains(",") && s.charAt(s.length()-1) != ','){
                if(input.indexOf(",") + 3 <= input.length()-1){
                    String formatted = input.substring(0, input.indexOf(",") + 3);
                    editReceiver.setText(formatted);
                    editReceiver.setSelection(formatted.length());
                }
            }
        }

请注意,德国小数点是 , 分隔的,而不是 .分开的 如果不需要,您可以删除 else 部分。

关于java - Edittext如何只接受小数点后两位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35791818/

相关文章:

java - Hadoop - 映射器的构造函数参数

c# - Xamarin.Forms 2.2 的签名板

android - 如何覆盖xml中的默认背景颜色?

android - 我有一个 EditText 字段,我想在应用程序再次打开时保存它

android - 如何复制android :editable ="false" in code?

Java数组修饰符方法

java - 如何从 Android 的内部存储中获取 .mp3 文件

android - 在 textWatcher 中搜索列表时 EditText 滞后

java - hazelcast 主题订阅总数

android - 在 android2.3.3 上使用 jquery 的 ssn 掩码