您的位置:首页 > 移动开发 > Android开发

android edittext限制输入小数位数,限制输入数字大小

2015-11-19 15:43 459 查看
在我们实际开发中,当涉及到金额输入的时候,必定会涉及到EditText输入小数位数的问题,下面就是如何实现限制输入框后面小数位数和输入的数字大小。

首先,我们要知道EditText的api中能够实现的这个功能需要使用哪个api。

第一种:使用InputFilter (这个英文直译应该叫输入过滤器吧)

不废话,直接上代码,注释上很清楚。

<span style="font-size:18px;">public class EditInputFilter implements InputFilter{
/**
* 最大数字
*/
public static final int MAX_VALUE = 10000;
/**
* 小数点后的数字的位数
*/
public static final int PONTINT_LENGTH = 2;
Pattern p;
public EditInputFilter(){
p = Pattern.compile("[0-9]*");   //除数字外的其他的
}

/**
*  source    新输入的字符串
*  start    新输入的字符串起始下标,一般为0
*  end    新输入的字符串终点下标,一般为source长度-1
*  dest    输入之前文本框内容
*  dstart    原内容起始坐标,一般为0
*  dend    原内容终点坐标,一般为dest长度-1
*/

@Override
public CharSequence filter(CharSequence src, int start, int end,
Spanned dest, int dstart, int dend) {
String oldtext =  dest.toString();
System.out.println(oldtext);
//验证删除等按键
if ("".equals(src.toString())) {
return null;
}
//验证非数字或者小数点的情况
Matcher m = p.matcher(src);
if(oldtext.contains(".")){
//已经存在小数点的情况下,只能输入数字
if(!m.matches()){
return null;
}
}else{
//未输入小数点的情况下,可以输入小数点和数字
if(!m.matches() && !src.equals(".") ){
return null;
}
}
//验证输入金额的大小
if(!src.toString().equals("")){
double dold = Double.parseDouble(oldtext+src.toString());
if(dold > MAX_VALUE){
CustomerToast.showToast(RechargeActivity.this, "输入的最大金额不能大于MAX_VALUE");
return dest.subSequence(dstart, dend);
}else if(dold == MAX_VALUE){
if(src.toString().equals(".")){
CustomerToast.showToast(RechargeActivity.this, "输入的最大金额不能大于MAX_VALUE");
return dest.subSequence(dstart, dend);
}
}
}
//验证小数位精度是否正确
if(oldtext.contains(".")){
int index = oldtext.indexOf(".");
int len = dend - index;
//小数位只能2位
if(len > PONTINT_LENGTH){
CharSequence newText = dest.subSequence(dstart, dend);
return newText;
}
}
return dest.subSequence(dstart, dend) +src.toString();
}
} </span><span style="font-size:24px;"> </span>


*ps:CustomerToast只是一个稍微配置了一下的Toast控件,避免有多个提醒的时候,会接连不断的出现。

使用方式:

InputFilter[] filters = { new EditInputFilter() };
edit.setFilters(filters);


你也可以吧上面的过滤器拆分为多个过滤器!这样以后有其他的需求的时候就可以自由混搭了!!

第二种 方式:addTextChangedListener(textwatcher),这种方式是对输入框添加一个内容监听,其中TextWatcher实现类中需要重写三个方法,

onTextChanged,beforeTextChanged,afterTextChanged,分别对应的是在edittext内容变化时,变化前,和变化后。ps:这些方法都是在输入框内容变化之前调用的,这种方式主要是对当前输入框中的内容进行一个验证,看是否能符合我们的规则。

代码就不写来,规则大致和上面有点像,但是比上面的那种要难处理一点。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: