标签:height star putty 情况 listener else lis private with
在EditText输入数字的时候,通常我们需要限制小数点前后位数.比如金额输入一般我们需要限制小数点后面最多2位.我们可以通过 TextWatcher 实现.
1 public class MyWatcher implements TextWatcher { 2 private int beforeDot; 3 private int afterDot; 4 /** 5 * 构造器 6 * 7 * @param beforeDot 小数点前位数 不限制输入-1 8 * @param afterDot 小数点后位数 不限制输入-1 9 */ 10 public MyWatcher(int beforeDot, int afterDot) { 11 this.beforeDot = beforeDot; 12 this.afterDot = afterDot; 13 } 14 15 16 @Override 17 public void beforeTextChanged(CharSequence s, int start, int count, int after) { 18 19 } 20 21 @Override 22 public void onTextChanged(CharSequence s, int start, int before, int count) { 23 24 } 25 26 @Override 27 public void afterTextChanged(Editable s) { 28 judge(s); 29 } 30 31 private void judge(Editable editable) { 32 String temp = editable.toString(); 33 int posDot = temp.indexOf("."); 34 //直接输入小数点的情况 35 if (posDot == 0) { 36 editable.insert(0, "0"); 37 return; 38 } 39 //连续输入0 40 if (temp.equals("00")) { 41 editable.delete(1, 2); 42 return; 43 } 44 //输入"08" 等类似情况 45 if (temp.startsWith("0") && temp.length() > 1 && (posDot == -1 || posDot > 1)) { 46 editable.delete(0, 1); 47 return; 48 } 49 50 //不包含小数点 不限制小数点前位数 51 if (posDot < 0 && beforeDot == -1) { 52 //do nothing 仅仅为了理解逻辑而已 53 return; 54 } else if (posDot < 0 && beforeDot != -1) { 55 //不包含小数点 限制小数点前位数 56 if (temp.length() <= beforeDot) { 57 //do nothing 仅仅为了理解逻辑而已 58 } else { 59 editable.delete(beforeDot, beforeDot + 1); 60 } 61 return; 62 } 63 64 //如果包含小数点 限制小数点后位数 65 if (temp.length() - posDot - 1 > afterDot && afterDot != -1) { 66 editable.delete(posDot + afterDot + 1, posDot + afterDot + 2);//删除小数点后多余位数 67 } 68 } 69 }
使用的时候 如下:
<EditText android:id="@+id/et_i_want" android:layout_width="wrap_content" android:layout_height="25dp" android:hint="0.00" android:inputType="numberDecimal"/> etIWant.addTextChangedListener(new MyWatcher(-1, 2));//限制小数点后最多2位
标签:height star putty 情况 listener else lis private with
原文地址:http://www.cnblogs.com/ganchuanpu/p/7631675.html