2014-02-22 16 views
0

我想設置模式「9,999」(其中9是數字0-9)編程的EditText的數字值。到目前爲止,我有:設置EditText與編碼器編程數字

final EditText editText = new EditText(v.getContext()); 
editText.setLayoutParams(params); 
editText.setText(""); 
editText.setKeyListener(DigitsKeyListener.getInstance("")); 
editText.setInputType(InputType.TYPE_CLASS_NUMBER); 
editText.setFilters(new InputFilter[] {new InputFilter.LengthFilter(maxLenght)}); 
editText.addTextChangedListener(new TextWatcher() { 
    int len=0; 
    //int count=0; 

    @Override 
    public void afterTextChanged(Editable s) { 
     String str = editText.getText().toString(); 
     if(str.length()==1&& len <str.length()){//len check for backspace 
      editText.append(","); 
     } 
    } 

    @Override 
    public void beforeTextChanged(CharSequence c, int arg1, int arg2, int arg3) { 
     String str = editText.getText().toString(); 
     len = str.length(); 
    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     String str = editText.getText().toString(); 
    }  
}); 

這是不是最好的,因爲:

  • DigitsKeyListener不會接受 「」 分隔符。
  • 當我輸入「1,0」和 然後去2倍退格我可以輸入「11111」。我必須去3x退格鍵 ,然後當我輸入「11111」將是「1,1111」

任何想法?

+0

檢查此鏈接可能會幫助,http://blog.roshka.com/2012/08/android-edittext-with-number-format.html,你可以更新班級到你想要的格式,希望這會有所幫助,如果可以的話,讓我知道如果我可以發佈答案 –

回答

2

你可以嘗試改變afterTextChange()方法本

@Override 
public void afterTextChanged(Editable s) { 
    try { 
     String str = String.format("%,d", Long.parseLong(s.toString() 
       .replaceAll(",", ""))); 
     int pos = editText.getSelectionStart(); 

     editText.removeTextChangedListener(this); 
     editText.setText(str); 
     editText.setSelection(pos + str.length() - s.length()); 
     editText.addTextChangedListener(this); 
    } catch (NumberFormatException e) { 
     e.printStackTrace(); 
    } 
}