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

原创 2015年11月19日 15:43:05

      在我们实际开发中,当涉及到金额输入的时候,必定会涉及到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:这些方法都是在输入框内容变化之前调用的,这种方式主要是对当前输入框中的内容进行一个验证,看是否能符合我们的规则。

代码就不写来,规则大致和上面有点像,但是比上面的那种要难处理一点。



Android 限制EditText只能输入数字、限制输入类型、限制输入长度的小技巧

准确的说让Edittext只能输入数字有方法两种,都是通过xml属性设置 方法一: ...

EditText限制输入数字范围

/** * Created by Mona. * 限制输入数字的范围 */ public class RegionNumberEditText extends EditText { pr...

Android基础--EditText输入框限制小数的位数解决方法

在开发中,会有一些需求,EditText输入框,只可以输入一位小数,或者只可以输入2位小数,那么我们该去怎么做呢? 首先在xml文件里面: ...

Android 控制edittext或者textview输入的为指定的整数位和小数位

Android 控制edittext或者textview输入的为指定的整数位和小数位,关于这个博客有一篇文章,不过要补充的是自定义键盘上如果出现00,或者其他自定义的数据如20000之类的,对于控制小...

EditText保留两位小数并输入不超过最大值

首先,xml中EditText设置属性: android:inputType="numberDecimal" 然后设置公有变量: priva...

Android EditText 限制输入类型数字或小数,并且小数位数限定为两位

 //允许输入数字并且可以为小数 edit.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECI...

Android EditText设置只能输入数字和小数点

EditText可以设置多种输入方式,其中若要设置输入数字和小数点时应注意一下几点: 1.如果设置只输入数字 edittext.setInputType( InputType.TYPE_CLASS_...

Android实现EditText输入金额

EditText是Android中一个非常实用的控件,有很多InputType,可以来达到不同的输入效果,如下图: 比如,密码输入,数字输入等等。但是最近在项目中要实现EditText输入金额,金...

【Android】对EditText输入金额添加限制及监听

场景分析: 项目中我们需要在一个EditText控件中输入金额,限制只能输入数字,可以为小数但保留2位小数,同时监听EditText一旦发现输入金额大于0那么使界面上的提交按钮可点。 第一步:设置...
  • cc_want
  • cc_want
  • 2016年09月08日 16:34
  • 1822

Android设置EditText只接受数字输入

EditText et; et = (EditText) findViewById(R.id.et); // 方法1:建立一个DigitsKeyListener,然后把它设为你的EditText的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android edittext限制输入小数位数,限制输入数字大小
举报原因:
原因补充:

(最多只允许输入30个字)