将限制设置为EditText

时间:2017-10-22 11:26:45

标签: java android

我想在EditText中设置最小值,这样用户就无法输入小于50的数字。

<EditText android:id="@+id/number"
                android:layout_width="150.0dip"
                android:hint="(min 50)"
                android:layout_height="wrap_content"
                android:inputType="number" />

3 个答案:

答案 0 :(得分:0)

单击按钮时进行测试。

你把它放到按钮的监听器中:

forkJoin

答案 1 :(得分:0)

我建议您使用TextWatcher。以下是简单的步骤:

步骤1 - 将要跟踪的EditText(或View)带入Java代码

第2步 - 在Activity中实现TextWatcher或在负责管理文本更改的句柄上创建一个单独的类(实现类似于其他侦听器s.a. OnClickListener)

第3步 - 实现TextWatcher中的所有方法(@Override接口方法)

步骤4 - 在View(EditText)上使用addTextChangedListener方法将其链接到TextWatcher(注册视图)

第5步 - 使用其中一种可用方法执行验证

实施后,我们必须从界面中覆盖3种方法:

void beforeTextChanged(CharSequence c, int i, int i2, int i3) {}
void onTextChanged(CharSequence c, int i, int i2, int i3) {} 
void afterTextChanged(Editable e) {}

所有这三种方法都会在任何更改时被调用(如键入或删除字母)。仅使用其中一个就足够了,并且最好使用afterTextChanged方法。 EDITABLE参数只是我们在EditText中的文本。

答案 2 :(得分:0)

你应该使用 InputFilter

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;
}

}

您应该在Activity / Fragment

上获得对Edit Text类的引用
EditText yourEditext = (EditText) findViewById(R.id.editText);

InputFilter[] editFilters = yourEditext.getFilters();
                InputFilter[] newFilters = new InputFilter[editFilters.length + 1];
                System.arraycopy(editFilters, 0, newFilters, 0, editFilters.length);
                newFilters[editFilters.length] = new InputFilterMinMax(0, 59);
                yourEditext.setFilters(newFilters);