Как установить inputfilter для edittext в android для decimal
У меня есть edittext, где я хочу ввести процентное значение, т. е. десятичное значение, поэтому я хочу ограничить пользователя вводить только значение меньше 100 в editText.
Пример: 1) если он хочет ввести значение больше 100, он не должен позволять ему вводить это.
2) если он хочет t0 ввести десятичное значение меньше 100 т. е. 50.5444 , то он должен позволить ему ввести это значение
Я также нашел Эту ссылку, где я могу установить фильтр для целочисленного значения максимум до 100, но это не позволяет мне ввести десятичное значение
Ссылка: http://tech.chitgoks.com/2011/06/27/android-set-min-max-value-an-edittext-accepts/
Кто-нибудь может мне помочь.
3 ответов:
Эй, вы можете использоватьTextWatcher , применить его к вашему
EditTextи реализовать три метода, которые он предоставляет. Затем при вставке нового значения можно использовать регулярное выражение для проверки его правильности.Надеюсь, это поможет!
Вот полный код реализации, который я использовал
editTextSpLinePercent.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } @Override public void afterTextChanged(Editable s) { // TODO Auto-generated method stub String enteredValue = s.toString(); if(checkNullValues(enteredValue)) { if(Float.parseFloat(enteredValue.trim()) >100.0f){ AlertDialog.Builder builder = new AlertDialog.Builder(SpecialDiscountLineActivity.this); // builder.setCancelable(true); builder.setMessage("Percentage Value should be Less than 100"); builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { editTextSpLinePercent.setText(""); } }); builder.show(); } } } }); public static boolean checkNullValues(String valueToCheck) { //Log.i("Log","CheckForNullValues : "+valueToCheck); if(!(valueToCheck == null)) { String valueCheck = valueToCheck.trim(); if(valueCheck.equals("") || valueCheck.equals("0") ) { // Log.i("Log","Returning false 0 or Blank"); return false; } return true; } //Log.i("Log","Returning false null"); return false; }
На самом деле вы можете изменить полезный код sniplet, предоставленный по ссылке, упомянутой в вопросе, следующим образом. Кроме того, вы можете указать максимальное количество знаков после запятой, которое вы хотите иметь в процентах, и использовать сопоставитель шаблонов для возврата
"", если входные данные не соответствуют предполагаемому шаблону.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);
Comments