2012-02-17 2 views
3

내 편집 텍스트에 소수점 두 자리 만 표시하고 싶습니다. 편집 텍스트에 통화를 표시하고 소수점 이하 2 자리로 제한하고 싶습니다.EditText가 소수점 두 자리 만 표시하도록

정규 표현식을 사용하는 몇 가지 해결책을 보았지만 그렇게하고 싶지는 않습니다. 나는 자바가 그것을 할 수있는 몇 가지 내부 라이브러리 함수를 지원한다고 들었다. 어느 누구도 나에게 힌트를 주거나 그것에 대한 효율적인 코드를 줄 수는 없습니다. 당신은 당신의 EditTextsetKeyListener()를 할당해야 EditText

+0

대신 어떤 종류의 2 슬롯 선택기를 구현할 생각이 있습니까? 그냥 생각. 아마도 더 친숙한 UX 일 것입니다. –

답변

8

당신은 단순히 DecimalFormat

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

당신은 결과 얻을 것이다 사용할 수 있습니다.

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

는 0부터 9까지 숫자를 받아들이는 DigitsKeyListener를 돌려, 플러스 마이너스 (단지 시작에) 서명 및/또는 소수점 (필드 당 하나)의 경우 지정했습니다.

+0

당신은 그것을 사용하는 방법을 명확히 할 수 있습니까? –

+0

내 대답을 편집했습니다. –

+0

나는이 코드를 onTextChanged 속성에 넣었다. 그것은 잘못된 인수 예외를 제공합니다. 어떤 아이디어? –

0

22.12

안부

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); 

      } 
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). 따라서 소수점 이하 2 자리 만 입력하면됩니다.

관련 문제