2012-10-16 108 views
0

我在listview中有edittext。我想限制用戶輸入小數點後兩位以上的數字。現在它允許n個數字。如何限制用戶輸入小數點後不輸入兩個以上的數字而不使用模式?如何限制用戶輸入小數點後沒有超過兩位數?

+0

看http://stackoverflow.com/questions/5357455/limit-decimal-places-in-android-edittext –

回答

1

您可以使用TextWatcher並在afterTextChanged方法中使用正則表達式來匹配所需的文本並刪除輸入的額外數字。

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(5,2)}); 
+0

我沒有在我的代碼使用模式。那麼該怎麼做呢? – Arunraj

+0

你是什麼意思「怎麼做?」。這個答案有什麼問題? – Astrorvald

0

這可能是晚了,但我張貼我的解決辦法希望它會作品有人

在文本觀察者方法afterTextChanged做到這一點。

public void afterTextChanged(Editable s) { 

       if(mEditText.getText().toString().contains(".")){ 
        String temp[] = mEditText.getText().toString().split("\\."); 
        if(temp.length>1) { 
         if (temp[1].length() > 3) { 
          int length = mEditText.getText().length(); 
          mEditText.getText().delete(length - 1, length); 
         } 
        } 
       } 
    } 
+0

這裏在(temp [1] .length()> 3)中3是「。」之後的數字的限制。你可以用你的限制來替換它 –

相關問題