在Android中为我的EditText实现InputFilter时遇到的问题

在Android中为我的EditText实现InputFilter时遇到的问题,android,android-edittext,input-filtering,input-filter,Android,Android Edittext,Input Filtering,Input Filter,我想限制我的应用程序的用户在编辑文本中输入值。这些值应该如下所示:3/54/32 第一个数字:0..13 中间数:0..7 最后一个号码:0..255 斜杠应该在编辑文本中显示 我已经有一个IP地址的InputFilter,但我不理解它…;-) //使用输入筛选器输入IP地址 InputFilter[]过滤器=新的InputFilter[1]; 筛选器[0]=新的InputFilter(){ 公共CharSequence筛选器(CharSequence源、int开始、int结束、跨区目标、int

我想限制我的应用程序的用户在编辑文本中输入值。这些值应该如下所示:3/54/32

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

斜杠应该在编辑文本中显示

我已经有一个IP地址的InputFilter,但我不理解它…;-)

//使用输入筛选器输入IP地址
InputFilter[]过滤器=新的InputFilter[1];
筛选器[0]=新的InputFilter(){
公共CharSequence筛选器(CharSequence源、int开始、int结束、跨区目标、int开始、int结束){
如果(结束>开始){
字符串destTxt=dest.toString();
String resultingTxt=destTxt.substring(0,dstart)+source.subSequence(start,end)+destTxt.substring(dend);
如果(!resultingTxt.matches(“^\\d{1,3}”(\\d{1,3})(\\.(\\d{1,3})(\\.(\\d{1,3})?)?)?”)
返回“”;
}否则{
String[]splits=resultingTxt.split(“\\”);
对于(int i=0;i 255){
返回“”;
}
}
}
}
返回null;
}
};                  
et_路由器_ip.设置过滤器(过滤器);

如果有人能帮我,那就太好了

如果将编辑文本除以3个不同的输入视图,效果会更好

为此,请准备您的通用函数,其中必须传递最小输入值、最大输入值和编辑文本Obj,如:

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
现在,在接下来的两个Edit Text Watcher中调用Edit_Validation(…)的方法相同

我认为这将是容易和耗时的。我在我的一个应用程序中也使用了同样的方法


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

中间的数字是从0到7,但在你的例子中,它是54。顺便说一下,如果你想在固定位置显示反斜杠,你可能需要浏览一行3个文本。这将真正缓解问题
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
// 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");
    }

  }
});