Edittext输入百分比值小于100,之后只有两位数可接受

问题描述 投票:2回答:2

我有EditText,我用它来输入百分比值。我把限制,用户不能输入超过100的值,它的工作正常。我也被允许以百分比形式输入分数部分,但只允许小数点后的两位数(。),即99.95

我希望它以编程方式实现,因为我在弹出窗口中使用此EditText,每次使用输入值并在其他字段中更改。我试过以下代码来实现我的目标。

if (title.contains("Deposit")) {
    edt_get_value_popup_value.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL | InputType.TYPE_NUMBER_FLAG_SIGNED);
    edt_get_value_popup_value.setFilters(new InputFilter[]{new InputFilterMinMax("1", "100")});
}

我正在使用过滤器类转换为百分比,请参阅以下代码:

public class InputFilterMinMax implements InputFilter {

   private Float min, max;

   public InputFilterMinMax(Float min, Float max) {
        this.min = min;
        this.max = max;
   }

   public InputFilterMinMax(String min, String max) {
        this.min = Float.parseFloat(min);
        this.max = Float.parseFloat(max);
    }

   @Override
   public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
       try {
            Float input = Float.parseFloat(dest.toString() + source.toString());
            if (isInRange(min, max, input)) return null;
        } catch (NumberFormatException nfe) {
        }
        return "";
   }

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

如何在EditText中设置分数限制?

enter image description here

java android android-edittext input-filter
2个回答
1
投票

您可以在应用一些更改后使用输入过滤器,如下所示:

 public class InputFilterMinMax implements InputFilter {

    private Float min, max;

    public InputFilterMinMax(Float min, Float max) {
        this.min = min;
        this.max = max;
    }

    public InputFilterMinMax(String min, String max) {
        this.min = Float.parseFloat(min);
        this.max = Float.parseFloat(max);
    }

    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
        try {
            Float input = Float.parseFloat(dest.toString() + source.toString());
            String inputValue = (dest.toString() + source.toString());
            if (isInRange(min, max, input, inputValue)) return null;
        } catch (NumberFormatException nfe) {
        }
        return "";
    }

    private boolean isInRange(Float min, Float max, Float input, String inputValue) {
        if (inputValue.contains(".") && (inputValue.split("\\.").length > 1)) {
            return (max > min ? input >= min && input <= max : input >= max && input <= min) && (inputValue.split("\\.")[1].length() < 3);
        } else {
            return (max > min ? input >= min && input <= max : input >= max && input <= min);
        }
    }
}

0
投票

使用edittext的maxLength属性,

<EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Customization"
        android:maxLength="4"
        android:singleLine="true"
        />
© www.soinside.com 2019 - 2024. All rights reserved.