2012-09-14 45 views
0

我正在編寫一個轉換器應用程序,並且我想將千位分隔符自動添加到實時數字中,所以在TextWatcher上實現此applypattern代碼後,現在無法使floationg點輸入.....這裏是我的代碼爲Editext如何使用DecimalFormat應用模式後啓用浮點數

am2 = new TextWatcher() 
{ 
    boolean isEdiging; 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
} 
public void onTextChanged(CharSequence s, int start, int before, int count) {} 
public void afterTextChanged(Editable s) { 
if (s.toString().equals("")) { 
    amount.setText(""); 
    value = 0; 
}else{ 
if(isEdiging) return; 
isEdiging = true; 
StringBuffer strBuff = new StringBuffer(); 
char c; 
for (int i = 0; i < amount2.getText().toString().length() ; i++) { 
    c = amount2.getText().toString().charAt(i); 
    if (Character.isDigit(c)) { 
    strBuff.append(c); 
    } 
} 
value = Double.parseDouble(strBuff.toString()); 
reverse(); 
NumberFormat nf2 = NumberFormat.getInstance(Locale.ENGLISH); 
((DecimalFormat)nf2).applyPattern("###,###.#######"); 
s.replace(0, s.length(), nf2.format(value)); 
isEdiging = false; 
} 
} 
}; 

所以有什麼方法可以在EditText中輸入浮點數?

回答

1

該類解決問題

public class NumberTextWatcher implements TextWatcher { 
private DecimalFormat df; 
private DecimalFormat dfnd; 
private boolean hasFractionalPart; 

private EditText et; 

public NumberTextWatcher(EditText et) 
{ 
    df = new DecimalFormat("#,###.##"); 
    df.setDecimalSeparatorAlwaysShown(true); 
    dfnd = new DecimalFormat("#,###"); 
    this.et = et; 
    hasFractionalPart = false; 
} 

@SuppressWarnings("unused") 
private static final String TAG = "NumberTextWatcher"; 

public void afterTextChanged(Editable s) 
{ 
    et.removeTextChangedListener(this); 

    try { 
     int inilen, endlen; 
     inilen = et.getText().length(); 

     String v = s.toString().replace(String.valueOf(df.getDecimalFormatSymbols().getGroupingSeparator()), ""); 
     Number n = df.parse(v); 
     int cp = et.getSelectionStart(); 
     if (hasFractionalPart) { 
      et.setText(df.format(n)); 
     } else { 
      et.setText(dfnd.format(n)); 
     } 
     endlen = et.getText().length(); 
     int sel = (cp + (endlen - inilen)); 
     if (sel > 0 && sel <= et.getText().length()) { 
      et.setSelection(sel); 
     } else { 
      // place cursor at the end? 
      et.setSelection(et.getText().length() - 1); 
     } 
    } catch (NumberFormatException nfe) { 
     // do nothing? 
    } catch (ParseException e) { 
     // do nothing? 
    } 

    et.addTextChangedListener(this); 
} 

public void beforeTextChanged(CharSequence s, int start, int count, int after) 
{ 
} 

public void onTextChanged(CharSequence s, int start, int before, int count) 
{ 
    if (s.toString().contains(String.valueOf(df.getDecimalFormatSymbols().getDecimalSeparator()))) 
    { 
     hasFractionalPart = true; 
    } else { 
     hasFractionalPart = false; 
    } 
} 

}