当最小值可以是 android 中的有符号数字时,如何修复编辑文本的最小值?

How to fix minimum value for Edit Text when the minimum can be a signed number in android?

我想修复我的 EditText 中的最小值和最大值。我使用了 InputFilter,对于最大值“100”,它已经可以工作了,但是对于最小值应该是“-100”,我的编辑文本不允许我在输入整数之前放置“-”。请问我该如何解决?

这里是 class

package ws.splash.project.model;
import android.text.InputFilter;
import android.text.Spanned;

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 {
        double input = Double.valueOf(dest.toString() + source.toString());
        if (isInRange(min, max, input))
            return null;
    } catch (NumberFormatException nfe) { }
    return "";
}

private boolean isInRange(int a, int b, double c) {
    return b > a ? c >= a && c <= b : c >= b && c <= a;
}
}

我是这样称呼它的:

       editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            editText.setFilters(new InputFilter[]{ new InputFilterMinMax("-100","100")});
        }
    });

尝试使用 numberSigned 作为 inputType 输入 -

android:inputType="numberSigned"

并像下面这样更改您的过滤器以处理负面消息

@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
    try {
        String newVal = dest.toString().substring(0, dstart) + dest.toString().substring(dend);

        newVal = newVal.substring(0, dstart) + source.toString() + newVal.substring(dstart);

        //Add this line to allow Negative values
        if(newVal.equalsIgnoreCase("-") && min < 0)
            return null;

        int input = Integer.parseInt(newVal);
        if (isInRange(min, max, input))
            return null;
    } catch (NumberFormatException nfe) {
        nfe.printStackTrace();
    }

    return "";
}

尝试加入xml
android:inputType="numberDecimal|numberSigned"

否则你可以在 Activity class 中添加如下

editText.setInputType(InputType.TYPE_NUMBER_FLAG_SIGNED | InputType.TYPE_CLASS_NUMBER);