2016-05-05 2 views
1

Я хочу сделать EditText для принятия десятичных значений, где допустимы 2 цифры после десятичной точки (необязательно). Значения могут быть:decimal input filter android

хххх

xxxx.x

xx.xx

.xx

.x

хх

Я пробовал так много решения, найденные в S/O, и я нашел правильное регулярное выражение для удовлетворения моего решения. Но никто не выполняет мои требования. некоторое решение удовлетворяет требованиям, но не позволяет редактировать до десятичной точки. Предположим, что когда значение edittext равно .xx, тогда нельзя редактировать до десятичной точки (.).

Может ли кто-нибудь указать правильное решение.

N.B .: использование свойства maxLength в EditText.

+0

Что такое регулярное выражение должен делать? Сопоставьте все десятичные знаки? –

+0

Что вам нужно, как o/p? –

+0

Не могли бы вы найти решение? У меня такая же проблема. Я не могу добавить новый символ до десятичной точки ... – atasoyh

ответ

1

попробовать это,

public class DecimalDigitsInputFilter implements InputFilter { 

    Pattern mPattern; 

    public DecimalDigitsInputFilter(int digitsBeforeZero,int digitsAfterZero) { 
     mPattern=Pattern.compile("[0-9]{0," + (digitsBeforeZero-1) + "}+((\\.[0-9]{0," + (digitsAfterZero-1) + "})?)||(\\.)?"); 
    } 

    @Override 
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { 

      Matcher matcher=mPattern.matcher(dest);  
      if(!matcher.matches()) 
       return ""; 
      return null; 
     } 


    } 

и установить фильтр для редактирования текста

editText.setFilters(new InputFilter[] { new DecimalDigitsInputFilter(10, 2) }); 
+1

Я тоже использовал это. Это соответствует моему требованию, но не позволяет изменять до десятичной точки (.) –

+0

что именно вы хотите? –

+1

Используйте свое решение, поместите значение .33 в Edittext и попробуйте добавить что-то до десятичной точки (.). Я уверен, что этого не произойдет. –