Вы можете изменить фрагмент кода, указанный в ссылке, указанной в вопросе, следующим образом. Кроме того, по желанию вы можете включить количество макс. Десятичных разрядов, которое вы хотите иметь в процентах, и использовать шаблон сопоставления для возврата ""
, если ввод не соответствует намеченному шаблону.
private class PercentageInputFilter implements InputFilter {
private float min;
private float max;
PercentageInputFilter(float min, float max) {
this.min = min;
this.max = max;
}
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
try {
// Get input
String stringToMatch = dest.toString() + source.toString();
float input = Float.parseFloat(stringToMatch);
// Check if the input is in range.
if (isInRange(min, max, input)) {
// return null to accept the original replacement in case the format matches and text is in range.
return null;
}
} catch (NumberFormatException nfe) {
}
return "";
}
private boolean isInRange(float min, float max, float input) {
return input >= min && input <= max;
}
}
Вы можете использовать его как:
new PercentageInputFilter((float) 0.00, (float) 100.00);