2012-02-17 99 views
3

我想在我的编辑文本中只显示两位小数,ofc我想在编辑文本中显示货币,但将其值限制为小数点后两位数。使EditText只显示两位小数

我看到了一些使用正则表达式的解决方案,但我不想那样做。我已经被告知,Java支持一些内部库函数可以做到这一点。任何人都可以给我提示或给我一些有效的代码。

问候

amount.setRawInputType(Configuration.KEYBOARD_12KEY); 

     amount.addTextChangedListener(new TextWatcher() 
     { 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
       // TODO Auto-generated method stub 
       DecimalFormat formatVal = new DecimalFormat("##.##"); 
       String formatted = formatVal.format(s); 
       amount.setText(formatted); 

      } 
+0

你有没有想过实施某种2槽选取器?只是一个想法。也许更友好的用户体验。 – 2012-02-17 05:58:53

回答

8

您可以简单地使用DecimalFormat

DecimalFormat format = new DecimalFormat("##.##"); 
String formatted = format.format(22.123); 
editText.setText(formatted); 

您将获得导致EditText22.12

+0

可以请您澄清一下,如何使用它? – 2012-02-17 05:59:50

+0

我编辑了我的答案。 – 2012-02-17 06:01:47

+0

好的我已经把这段代码放在onTextChanged属性中。它给予非法论证例外。任何想法? – 2012-02-17 06:13:56

0

你只需要分配setKeyListener()EditText

myEditText.setKeyListener(DigitsKeyListener.getInstance(true,true)); 

返回DigitsKeyListener即0到9接受数字,如果加指定的减号(仅在开始时)和/或小数点(每场只有一个)。

3

这是一个解决方案,它将限制用户在编辑文本中输入内容。

InputFilter filter = new InputFilter() { 
    final int maxDigitsBeforeDecimalPoint=2; 
    final int maxDigitsAfterDecimalPoint=2; 

    @Override 
    public CharSequence filter(CharSequence source, int start, int end, 
      Spanned dest, int dstart, int dend) { 
      StringBuilder builder = new StringBuilder(dest); 
      builder.replace(dstart, dend, source 
        .subSequence(start, end).toString()); 
      if (!builder.toString().matches(
        "(([1-9]{1})([0-9]{0,"+(maxDigitsBeforeDecimalPoint-1)+"})?)?(\\.[0-9]{0,"+maxDigitsAfterDecimalPoint+"})?" 

        )) { 
       if(source.length()==0) 
        return dest.subSequence(dstart, dend); 
       return ""; 
      } 

     return null; 

    } 
}; 

mEdittext.setFilters(new InputFilter[] { filter }); 

例如,12.22所以只允许输入前两位数字和小数位后两位数字。