如何在Android Studio/Java中限制输入到EditText中的整数值
我设置了一个editText,用户只能输入一个整数值。然后将该值发送到API。问题是,如果值太高,服务器就会过载(Heroku问题)。 我想知道是否有一种方法可以限制可以输入到editText中的值。例如,用户只能输入1-800之间的值 很明显,我不能限制数值的位数,例如3位数,因为这将允许数值高达999 还有另一个问题有待解决,不过答案是,Q似乎没有提出一个优雅的解决方案,而是将不同的错误代码合并在一起 以下是editText的当前MainActivity和xml 活动\u main.xml如何在Android Studio/Java中限制输入到EditText中的整数值,java,android,Java,Android,我设置了一个editText,用户只能输入一个整数值。然后将该值发送到API。问题是,如果值太高,服务器就会过载(Heroku问题)。 我想知道是否有一种方法可以限制可以输入到editText中的值。例如,用户只能输入1-800之间的值 很明显,我不能限制数值的位数,例如3位数,因为这将允许数值高达999 还有另一个问题有待解决,不过答案是,Q似乎没有提出一个优雅的解决方案,而是将不同的错误代码合并在一起 以下是editText的当前MainActivity和xml 活动\u 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" />
对于从编辑文本中提取数据的按钮,使用onclicklistener。您只需具备此条件即可检查输入的值是否在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
}
EditText-editText2=findViewById(R.id.editText2);
字符串tweetNo=editText2.getText().toString();
int result=Integer.parseInt(tweetNo);//将字符串转换为int
如果(result>=1&&result您可以为您的EditText
InputFilter
设置自定义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;
}
}
您可以使用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 "";
}
}});
editText2.setFilters(new InputFilter[]{new InputFilter(){
@凌驾
公共CharSequence筛选器(CharSequence CharSequence,int i,int i1,带跨距,int i2,int i3){
试一试{
int val=Integer.parseInt(span.toString()+charSequence.toString());
如果(min)您可以使用微调器而不是文本视图,然后在其上设置最小值和最大值吗?如果我找不到优雅的解决方案,这是一个选项。我喜欢edittext的想法,但如果需要,我肯定会走这条路,如果可能的话“然而,Q中的答案似乎并没有提出一个优雅的解决方案,而是不同错误代码片段的合并“如果是,请解释为什么这个问题中给出的答案不正确work@JohnJoe据报道,该线程中超过一半的答案都有下面的人的错误。这很有效,因为我实现了它。谢谢你。我想补充一下,我也尝试过这个,效果很好。谢谢你的输入
editText.setFilters(new InputFilter[]{new CustomRangeInputFilter(0f, 800.0f)});
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 "";
}
}});