EditText限制小数点前后位数的实例
在EditText输入数字的时候,通常我们需要限制小数点前后位数。比如金额输入一般我们需要限制小数点后面最多2位。我们可以通过TextWatcher 实现。
publicclassMyWatcherimplementsTextWatcher{ privateintbeforeDot; privateintafterDot; /** *构造器 * *@parambeforeDot小数点前位数不限制输入-1 *@paramafterDot小数点后位数不限制输入-1 */ publicMyWatcher(intbeforeDot,intafterDot){ this.beforeDot=beforeDot; this.afterDot=afterDot; } @Override publicvoidbeforeTextChanged(CharSequences,intstart,intcount,intafter){ } @Override publicvoidonTextChanged(CharSequences,intstart,intbefore,intcount){ } @Override publicvoidafterTextChanged(Editables){ judge(s); } privatevoidjudge(Editableeditable){ Stringtemp=editable.toString(); intposDot=temp.indexOf("."); //直接输入小数点的情况 if(posDot==0){ editable.insert(0,"0"); return; } //连续输入0 if(temp.equals("00")){ editable.delete(1,2); return; } //输入"08"等类似情况 if(temp.startsWith("0")&&temp.length()>1&&(posDot==-1||posDot>1)){ editable.delete(0,1); return; } //不包含小数点不限制小数点前位数 if(posDot<0&&beforeDot==-1){ //donothing仅仅为了理解逻辑而已 return; }elseif(posDot<0&&beforeDot!=-1){ //不包含小数点限制小数点前位数 if(temp.length()<=beforeDot){ //donothing仅仅为了理解逻辑而已 }else{ editable.delete(beforeDot,beforeDot+1); } return; } //如果包含小数点限制小数点后位数 if(temp.length()-posDot-1>afterDot&&afterDot!=-1){ editable.delete(posDot+afterDot+1,posDot+afterDot+2);//删除小数点后多余位数 } } }
使用的时候如下:
etIWant.addTextChangedListener(newMyWatcher(-1,2));//限制小数点后最多2位
以上这篇EditText限制小数点前后位数的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。