EditText范围内的值

pra*_*gai 9 android

我想在1-60范围内输入值.该EditText不该接受61,62一样...值,或者0,-1,-2 ...

我们如何EditText在android中提供1-60的范围?我在main.xml中完成了

 <EditText android:layout_height="wrap_content" 
    android:id="@+id/editText1" 
    android:layout_width="160dip" 
    android:inputType="number">
    </EditText>
Run Code Online (Sandbox Code Playgroud)

Tim*_*Ohr 17

您可以将TextWatcherEditText和监听文本的变化有,例如:

public void afterTextChanged(Editable s) {
   try {
     int val = Integer.parseInt(s.toString());
     if(val > 60) {
        s.replace(0, s.length(), "60", 0, 2);
     } else if(val < 1) {
        s.replace(0, s.length(), "1", 0, 1);
     }
   } catch (NumberFormatException ex) {
      // Do something
   }
}
Run Code Online (Sandbox Code Playgroud)

如Devunwired所述,请注意调用s.replace()将再次递归调用TextWatcher.

通常通过检查布尔"编辑"标志来包装这些更改,以便递归调用跳过并简单地返回来自内部的更改.

  • +1:这是处理此问题的正确方法,但应注意,您在此处所做的更改通常会以递归方式再次调用TextWatcher.通常通过检查布尔"编辑"标志来包装这些更改,以便递归调用跳过并在更改来自内部时简单地返回. (4认同)

Dan*_*son 5

我曾经碰到过一个整洁的解决方案在这里:

public class InputFilterMinMax implements InputFilter {

private int min, max;

public InputFilterMinMax(int min, int max) {
    this.min = min;
    this.max = max;
}

public InputFilterMinMax(String min, String max) {
    this.min = Integer.parseInt(min);
    this.max = Integer.parseInt(max);
}

@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
    try {
        int input = Integer.parseInt(dest.toString() + source.toString());
        if (isInRange(min, max, input))
            return null;
    } catch (NumberFormatException nfe) { }
    return "";
}

private boolean isInRange(int a, int b, int c) {
    return b > a ? c >= a && c <= b : c >= b && c <= a;
}
}
Run Code Online (Sandbox Code Playgroud)

只需将此过滤器应用于编辑文本,如下所示:

mCentsEditText = (EditText)v.findViewById(R.id.cents_edit_text);
InputFilterMinMax filter = new InputFilterMinMax("0", "99") {};
mCentsEditText.setFilters(new InputFilter[]{filter});
Run Code Online (Sandbox Code Playgroud)

  • 此解决方案不适用于5到35的范围,因为它现在允许您输入11,因为单个1小于5最小值. (2认同)