当最小值可以是 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);
我想修复我的 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);