2016-05-05 96 views
1

我想讓一個EditText取小數點後兩位數字的位數(可選)。值可以是:十進制輸入過濾器android

XXXX

xxxx.x

XX.XX

.XX

.X

XX

我試過這麼多S/O中找到的解決方案,我找到了合適的正則表達式來滿足我的解決方案。但沒有一個符合我的要求。一些解決方案符合要求,但不允許在小數點之前進行編輯。假設edittext值是.xx,那麼在小數點(。)之前不能編輯。

任何人都可以指出適當的解決方案。

N.B .:使用EditText中的maxLength屬性。

+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

使用您的解決方案,在Edittext中放入.33值,並嘗試在小數點(。)之前添加一些內容。我相信這不會發生。 –