我有一个editText设置,以便用户只能输入一个整数值。然后将该值发送到API。问题是如果值太高,服务器将过载(Heroku问题)。 我想知道是否有一种方法来实际限制可以输入到editText中的值。例如,用户只能输入1-800之间的值。
不好意思,我不能通过数字(例如3个数字)来限制该值,因为这样最多可以允许999。
对此还存在另一个问题,但是Q中的答案似乎并没有提出一种优雅的解决方案,而是将不同的错误代码合并在一起。
这是editText的当前MainActivity和xml。
activity_main.xml
<EditText
android:id="@+id/editText2"
android:layout_width="274dp"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="278dp"
android:ems="10"
android:hint="Enter number of tweets..."
android:inputType="number" />
mainActivity.Java
EditText editText2 = findViewById(R.id.editText2);
String tweetNo = editText2.getText().toString();
还带有一个onclicklistener按钮,该按钮也可以从editText提取数据。
答案 0 :(得分:3)
您只需要具备此条件,即可检查输入的值是否在1到800之间。
EditText editText2 = findViewById(R.id.editText2);
String tweetNo = editText2.getText().toString();
int result = Integer.parseInt(tweetNo); // convert String to int
if (result >= 1 && result <= 800){
// do whatever you want
}
答案 1 :(得分:2)
您可以使用InputFilter限制值。
editText2.setFilters(new InputFilter[]{new InputFilter() {
@Override
public CharSequence filter(CharSequence charSequence, int i, int i1, Spanned spanned, int i2, int i3) {
try{
int val=Integer.parseInt(spanned.toString()+charSequence.toString());
if(MIN<=val&&val<=MAX)
return null;
}catch (NumberFormatException e){
}
return "";
}
}});
答案 2 :(得分:0)
您可以为InputFilter
设置自定义EditText
。 InputFilter
定义了EditText
内部允许的值,在您的情况下,我们需要定义一个过滤器,该过滤器仅接受0
到800
范围内的值。像这样定义过滤器类:
public class CustomRangeInputFilter implements InputFilter {
private double minValue;
private double maxValue;
public CustomRangeInputFilter(double minVal, double maxVal) {
this.minValue = minVal;
this.maxValue = maxVal;
}
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dStart, int dEnd) {
try {
// Remove the string out of destination that is to be replaced
String newVal = dest.toString().substring(0, dStart) + dest.toString().substring(dEnd, dest.toString().length());
newVal = newVal.substring(0, dStart) + source.toString() + newVal.substring(dStart, newVal.length());
double input = Double.parseDouble(newVal);
if (isInRange(minValue, maxValue, input)) {
return null;
}
} catch (NumberFormatException e) {
e.printStackTrace();
}
return "";
}
private boolean isInRange(double a, double b, double c) {
return b > a ? c >= a && c <= b : c >= b && c <= a;
}
}
然后,您通过EditText
方法在onCreate
上设置过滤器:
editText.setFilters(new InputFilter[]{new CustomRangeInputFilter(0f, 800.0f)});