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限制小数点前后位数的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。