【问题标题】:How to set inputfilter for edittext in android for decimal如何在android中为edittext设置inputfilter为十进制
【发布时间】:2012-01-11 08:27:10
【问题描述】:

我有 edittext,我想在其中输入百分比值,即小数值,所以我想限制用户在 editText 中只输入小于 100 的值。

例子:1)如果他想输入值超过100,它不应该让他输入这个。

2)如果他想要 t0 输入小于 100 的十进制值,即 50.5444,那么它应该允许他输入这个值

我还找到了 此链接,我可以在其中将整数值的过滤器设置为最大 100,但它不允许我输入十进制值

链接:http://tech.chitgoks.com/2011/06/27/android-set-min-max-value-an-edittext-accepts/

谁能帮帮我。

【问题讨论】:

    标签: android android-edittext input-filtering


    【解决方案1】:

    您可以使用TextWatcher,将其应用到您的EditText 并实现它提供的三种方法。然后,当您插入一个新值时,您可以使用 RegEx 来检查其有效性。

    希望对你有帮助!

    【讨论】:

    • 谢谢 Dimitris ...我明白了,我正在写答案
    【解决方案2】:

    这是我使用的完整实现代码

    editTextSpLinePercent.addTextChangedListener(new TextWatcher() {
    
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // TODO Auto-generated method stub
        }
    
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                                        int after) {
            // TODO Auto-generated method stub
        }
    
        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub
            String enteredValue = s.toString();
            if(checkNullValues(enteredValue)) {
                if(Float.parseFloat(enteredValue.trim()) >100.0f){
                    AlertDialog.Builder builder = new AlertDialog.Builder(SpecialDiscountLineActivity.this);
                    // builder.setCancelable(true);
                    builder.setMessage("Percentage Value should be Less than 100");
    
                    builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface arg0, int arg1) {
                             editTextSpLinePercent.setText("");
                        }
                    });           
                    builder.show();            
                }
            }
        }
    });
    
    
    public static boolean checkNullValues(String valueToCheck) {
        //Log.i("Log","CheckForNullValues : "+valueToCheck);
        if(!(valueToCheck == null)) {
            String valueCheck = valueToCheck.trim();
            if(valueCheck.equals("") || valueCheck.equals("0")  ) {
                //  Log.i("Log","Returning false 0 or Blank");
                return false;
            }
            return true;
        }
        //Log.i("Log","Returning false null");
        return false;
    }
    

    【讨论】:

      【解决方案3】:

      您实际上可以修改问题中提到的链接中提供的有用代码片段,如下所示。您还可以选择包含您希望百分比具有的最大小数位数,并在输入与预期模式不匹配时使用模式匹配器返回 ""

      private class PercentageInputFilter implements InputFilter {
          private float min;
          private float max;
      
          PercentageInputFilter(float min, float max) {
              this.min = min;
              this.max = max;
          }
      
          @Override
          public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
              try {
                  // Get input
                  String stringToMatch = dest.toString() + source.toString();
                  float input = Float.parseFloat(stringToMatch);
      
                  // Check if the input is in range.
                  if (isInRange(min, max, input)) {
                      // return null to accept the original replacement in case the format matches and text is in range.
                      return null;
                  }
              } catch (NumberFormatException nfe) {
              }
              return "";
          }
      
          private boolean isInRange(float min, float max, float input) {
              return input >= min && input <= max;
          }
      }
      

      你可以像这样使用它:

      new PercentageInputFilter((float) 0.00, (float) 100.00);
      

      【讨论】:

        猜你喜欢
        • 2015-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多