【问题标题】:Problems implementing InputFilter for my EditText in Android在 Android 中为我的 EditText 实现 InputFilter 的问题
【发布时间】:2012-10-23 12:54:27
【问题描述】:

我想限制我的应用程序的用户在 EditText 中输入值。值应如下所示:3/54/32

第一个数字:0..13 中间数:0..7 最后一个数字:0..255

斜线应该在 EditText 中显示修复!

我已经有一个 IP 地址的 InputFilter,但我不明白它...... ;-)

 //Use a input filter for the input of the IP address
            InputFilter[] filters = new InputFilter[1];
            filters[0] = new InputFilter() {
                    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
                        if (end > start) {
                            String destTxt = dest.toString();
                            String resultingTxt = destTxt.substring(0, dstart) + source.subSequence(start, end) + destTxt.substring(dend);
                            if (!resultingTxt.matches ("^\\d{1,3}(\\.(\\d{1,3}(\\.(\\d{1,3}(\\.(\\d{1,3})?)?)?)?)?)?")) { 
                                return "";
                            } else {
                                String[] splits = resultingTxt.split("\\.");
                                for (int i=0; i<splits.length; i++) {
                                    if (Integer.valueOf(splits[i]) > 255) {
                                        return "";
                                    }
                                }
                            }
                        }
                 return null;
                 }
            };                  
            et_router_ip.setFilters(filters);

如果有人可以帮助我,那就太好了!

【问题讨论】:

  • 中间数字从 0 到 7,但在您的示例中,它是 54
  • 顺便说一句,如果你想在固定位置显示反斜杠,你可能需要遍历一行 3 个编辑文本。那真的可以缓解问题

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


【解决方案1】:

如果您将编辑文本除以 3 个不同的输入视图,那就更棒了。

为此准备您的通用函数,您必须在其中传递最小输入值、最大输入值和您的 Edit Text Obj Like:

public void Edit_Validation(int MinLen, int MaxLen, EditText edt)
  throws NumberFormatException {
if (edt.getText().toString().length() <= 0) {
  edt.setError("Required.");
  data = null;
} else if (Double.valueOf(edt.getText().toString()) < MinLen
    || Double.valueOf(edt.getText().toString()) > MaxLen) {
  edt.setError("Out of Range " + MinLen + " or " + MaxLen);
  data = null;
} else {
  data = edt.getText().toString();
} } // END OF Edittext validation

现在您可以在用户使用 TextWatcher 输入编辑文本时检查当前值。

// EditText Validateion
Your_First_EditText.addTextChangedListener(new TextWatcher() {
  @Override
  public void onTextChanged(CharSequence s, int start, int before, int count) {

  }

  @Override
  public void beforeTextChanged(CharSequence s, int start, int count, int after) {

  }

  @Override
  public void afterTextChanged(Editable s) {
    try {

      Edit_Validation(0,13, Your_First_EditText);


    } catch (Exception e) {
      Log.e("Invalid Value", "Negative Value");
    }

  }
});

现在您可以在接下来的两个 Edit Text Watcher 中调用 Edit_Validation(...)。

我认为这将是简单且耗时的。我也在我的一个应用程序中使用了相同的方法。

如果你得到准确的答案,请与我分享。

【讨论】:

    猜你喜欢
    • 2012-01-11
    • 2011-03-21
    • 2011-09-24
    • 1970-01-01
    • 2016-07-18
    • 2021-03-17
    • 1970-01-01
    • 2015-03-04
    • 1970-01-01
    相关资源
    最近更新 更多