上次寫了一篇EditText只能輸入金額的部落格,後來發現一個bug,當還未輸入數位情況下輸入小數點程式就崩了,我去測了一下支付寶,看看會怎麼樣,我先輸入小數點,程式正常,我再輸入數字,可以正常輸入,但是不夠完美,因為”.562“是多少錢呢,我要補充的就是當還未輸入數位情況下輸入小數點時,個位元字自動補零。鑒於那個代碼比較冗餘我就又去網上查資料,綜合下來總結了一個比較好的實現方式,給EditText添加監聽。
public class Money {
public static void setPricePoint(final EditText editText) {
editText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
if (s.toString().contains(".")) {
if (s.length() - 1 - s.toString().indexOf(".") > 2) {
s = s.toString().subSequence(0,
s.toString().indexOf(".") + 3);
editText.setText(s);
editText.setSelection(s.length());
}
}
if (s.toString().trim().substring(0).equals(".")) {
s = "0" + s;
editText.setText(s);
editText.setSelection(2);
}
if (s.toString().startsWith("0") && s.toString().trim().length() > 1) {
if (!s.toString().substring(1, 2).equals(".")) {
editText.setText(s.subSequence(0, 1));
editText.setSelection(1);
return;
}
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
}
}
使用起來就很簡單了
tv_price = (EditText)findViewById(R.id.tv_price);
Money.setPricePoint(tv_price);