android edittext限制输入小数位数,限制输入数字大小
2015-11-19 15:43
459 查看
在我们实际开发中,当涉及到金额输入的时候,必定会涉及到EditText输入小数位数的问题,下面就是如何实现限制输入框后面小数位数和输入的数字大小。
首先,我们要知道EditText的api中能够实现的这个功能需要使用哪个api。
第一种:使用InputFilter (这个英文直译应该叫输入过滤器吧)
不废话,直接上代码,注释上很清楚。
*ps:CustomerToast只是一个稍微配置了一下的Toast控件,避免有多个提醒的时候,会接连不断的出现。
使用方式:
你也可以吧上面的过滤器拆分为多个过滤器!这样以后有其他的需求的时候就可以自由混搭了!!
第二种 方式:addTextChangedListener(textwatcher),这种方式是对输入框添加一个内容监听,其中TextWatcher实现类中需要重写三个方法,
onTextChanged,beforeTextChanged,afterTextChanged,分别对应的是在edittext内容变化时,变化前,和变化后。ps:这些方法都是在输入框内容变化之前调用的,这种方式主要是对当前输入框中的内容进行一个验证,看是否能符合我们的规则。
代码就不写来,规则大致和上面有点像,但是比上面的那种要难处理一点。
首先,我们要知道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:这些方法都是在输入框内容变化之前调用的,这种方式主要是对当前输入框中的内容进行一个验证,看是否能符合我们的规则。
代码就不写来,规则大致和上面有点像,但是比上面的那种要难处理一点。
相关文章推荐
- 获取android SDCard存储大小
- 往Android SDCard中写入数据
- android 回调 activity向viewpager中的fragment传值
- 使用ANT打包Android应用
- android里面线程睡眠事件使用方法
- android activity的生命周期
- Android Manifest.xml详解
- android上的JAVA8:使用retrolambda
- Android编程实现Gallery中每次滑动只显示一页的方法
- Android实现全屏显示的方法
- Android下的弹幕的简单实现
- android蓝牙4.0(BLE)开发之ibeacon初步
- android6.0&小米note标配版
- Downloadmanager in android
- Android中的显示单位
- android Activity与Fragment之间的通信
- Android编程之代码创建布局实例分析
- Android5.0(lollipop)新特性介绍(一)
- android 系统目录及adb
- android 设置 EditTextView不自动获得焦点