今天回頭看了看昨天的代碼,才發現上篇總結的很不到位,存在很多bug,在這裡稍微補充一下,
來個加強版本
上篇的不足之處:
1 未做小數相關的邏輯編寫
2 沒有考慮到輸入非法字元時的情況
完善後寫成了一個工具類,更加友善調用與代碼的規範
效果圖:

首先判斷是否允許輸入數字包含小數類型,在此要限制EditText可接收的内容
<span style="font-family:Comic Sans MS;font-size:18px;"> mEditText.setKeyListener(new NumberKeyListener() {
@Override
protected char[] getAcceptedChars() {
if(isPoint){
return new char[]{'1', '2', '3', '4', '5', '6', '7', '8', '9', '0','.'};
}
return new char[]{'1', '2', '3', '4', '5', '6', '7', '8', '9', '0'};
}
@Override
public int getInputType() {
return InputType.TYPE_CLASS_NUMBER;
}
});</span>
雖然限制了EditText可接收的内容,但當有非法字元輸入時仍要做一定的判斷,當輸入除了0~9或者小數點以外的字元,都表示使用者點選了非法字元.
通過使用者新輸入的字元和文本框之前的字元來限制隻能輸入一個小數點,并限制小數的位數
<span style="font-family:Comic Sans MS;font-size:18px;">if(oldStr.contains(".")){
//隻能輸入一個小數點
if (newStr.contains(".")) {
return "";
}
//以小數點為界分割字元串
String[] splitArray = oldStr.split("\\.");
if (splitArray.length > 1) {
//得到小數點後的字元串
String dotValue = splitArray[1];
if (dotValue.length() == POINT_LENGHT) {
return "";
}
}
}</span>
當輸入字元長度大于2且沒有非法字元和小數位時進行格式化金額操作
<span style="font-family:Comic Sans MS;font-size:18px;">//格式化金額,三位一斷
if (oldStr!=null && oldStr.length() > 2
&& !oldStr.contains(".") && !oldStr.contains(",")) {
String newValue = oldStr + source;
String amountStr = format.format(Double.parseDouble(newValue));
mEditText.setText("");
mEditText.setText(amountStr);
mEditText.setSelection(amountStr.length());
return amountStr;
} </span>
詳細代碼連接配接:http://download.csdn.net/detail/huiling815/9623118