打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Android实现EditText输入金额

EditText是Android中一个非常实用的控件,有很多InputType,可以来达到不同的输入效果,如下图:


比如,密码输入,数字输入等等。但是最近在项目中要实现EditText输入金额,金额的限制因素很多,比如,只能输入数字和小数点,首位不能输入0和小数点,小数点后面只能保留两位等等,这些仅仅用InputType是无法实现的,今天用InputFilter来实现。

1. 首先需要将EditText的InputType设置成如下格式,保证用户只能输入小数点和数字

android:inputType="numberDecimal"或者setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL)

2. 自定义InputFilter,代码如下:

CashierInputFilter.java

  1. package com.iscs.mobilewcs.tools;  
  2.   
  3. import android.text.InputFilter;  
  4. import android.text.Spanned;  
  5. import android.text.TextUtils;  
  6.   
  7. import java.util.regex.Matcher;  
  8. import java.util.regex.Pattern;    
  9.     
  10. /**  
  11.  * Created by Jackie on 2017/2/22. 
  12.  * 过滤用户输入只能为金额格式  
  13.  */    
  14. public class CashierInputFilter implements InputFilter {  
  15.     Pattern mPattern;    
  16.   
  17.     //输入的最大金额    
  18.     private static final int MAX_VALUE = Integer.MAX_VALUE;    
  19.     //小数点后的位数    
  20.     private static final int POINTER_LENGTH = 2;    
  21.     
  22.     private static final String POINTER = ".";    
  23.     
  24.     private static final String ZERO = "0";  
  25.   
  26.     public CashierInputFilter() {  
  27.         mPattern = Pattern.compile("([0-9]|\\.)*");    
  28.     }    
  29.     
  30.     /**  
  31.      * @param source    新输入的字符串  
  32.      * @param start     新输入的字符串起始下标,一般为0  
  33.      * @param end       新输入的字符串终点下标,一般为source长度-1  
  34.      * @param dest      输入之前文本框内容  
  35.      * @param dstart    原内容起始坐标,一般为0  
  36.      * @param dend      原内容终点坐标,一般为dest长度-1  
  37.      * @return          输入内容  
  38.      */    
  39.     @Override    
  40.     public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {    
  41.         String sourceText = source.toString();    
  42.         String destText = dest.toString();  
  43.     
  44.         //验证删除等按键    
  45.         if (TextUtils.isEmpty(sourceText)) {    
  46.             return "";    
  47.         }    
  48.     
  49.         Matcher matcher = mPattern.matcher(source);    
  50.         //已经输入小数点的情况下,只能输入数字    
  51.         if(destText.contains(POINTER)) {    
  52.             if (!matcher.matches()) {    
  53.                 return "";    
  54.             } else {    
  55.                 if (POINTER.equals(source.toString())) {  //只能输入一个小数点  
  56.                     return "";    
  57.                 }    
  58.             }    
  59.     
  60.             //验证小数点精度,保证小数点后只能输入两位    
  61.             int index = destText.indexOf(POINTER);    
  62.             int length = dend - index;    
  63.     
  64.             if (length > POINTER_LENGTH) {    
  65.                 return dest.subSequence(dstart, dend);  
  66.             }    
  67.         } else {  
  68.             /** 
  69.              * 没有输入小数点的情况下,只能输入小数点和数字 
  70.              * 1. 首位不能输入小数点 
  71.              * 2. 如果首位输入0,则接下来只能输入小数点了 
  72.              */  
  73.             if (!matcher.matches()) {    
  74.                 return "";    
  75.             } else {    
  76.                 if ((POINTER.equals(source.toString())) && TextUtils.isEmpty(destText)) {  //首位不能输入小数点  
  77.                     return "";  
  78.                 } else if (!POINTER.equals(source.toString()) && ZERO.equals(destText)) { //如果首位输入0,接下来只能输入小数点  
  79.                     return "";  
  80.                 }  
  81.             }    
  82.         }    
  83.     
  84.         //验证输入金额的大小  
  85.         double sumText = Double.parseDouble(destText + sourceText);  
  86.         if (sumText > MAX_VALUE) {    
  87.             return dest.subSequence(dstart, dend);    
  88.         }    
  89.     
  90.         return dest.subSequence(dstart, dend) + sourceText;    
  91.     }    
  92. }  
使用方法如下:




本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
【转】android editText 输入字数限制
android限制输入框长度与限制输入数目字
android 默认数字键盘的实现
Android中EditText的输入字数限制
Android之让EditText不被键盘挡住
Android 使用android:inputType属性,从EditText中输入获取数字
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服