Android实现EditText输入金额
程序员文章站
2024-02-26 17:45:40
edittext是android中一个非常实用的控件,有很多inputtype,可以来达到不同的输入效果,如下图:
比如,密码输入,数字输入等等。但是最近在项目中要实...
edittext是android中一个非常实用的控件,有很多inputtype,可以来达到不同的输入效果,如下图:
比如,密码输入,数字输入等等。但是最近在项目中要实现edittext输入金额,金额的限制因素很多,比如,只能输入数字和小数点,首位不能输入0和小数点,小数点后面只能保留两位等等,这些仅仅用inputtype是无法实现的,今天用inputfilter来实现。
1. 首先需要将edittext的inputtype设置成如下格式,保证用户只能输入小数点和数字
android:inputtype="numberdecimal"或者setinputtype(inputtype.type_number_flag_decimal)
2. 自定义inputfilter,代码如下:
cashierinputfilter.java
package com.xylpay.utils; import android.text.inputfilter; import android.text.spanned; import android.text.textutils; import java.util.regex.matcher; import java.util.regex.pattern; /** * created by jackie on 2016/1/30. * 过滤用户输入只能为金额格式 */ public class cashierinputfilter implements inputfilter { pattern mpattern; //输入的最大金额 private static final int max_value = integer.max_value; //小数点后的位数 private static final int pointer_length = 2; private static final string pointer = "."; private static final string zero = "0"; public cashierinputfilter() { mpattern = pattern.compile("([0-9]|\\.)*"); } /** * @param source 新输入的字符串 * @param start 新输入的字符串起始下标,一般为0 * @param end 新输入的字符串终点下标,一般为source长度-1 * @param dest 输入之前文本框内容 * @param dstart 原内容起始坐标,一般为0 * @param dend 原内容终点坐标,一般为dest长度-1 * @return 输入内容 */ @override public charsequence filter(charsequence source, int start, int end, spanned dest, int dstart, int dend) { string sourcetext = source.tostring(); string desttext = dest.tostring(); //验证删除等按键 if (textutils.isempty(sourcetext)) { return ""; } matcher matcher = mpattern.matcher(source); //已经输入小数点的情况下,只能输入数字 if(desttext.contains(pointer)) { if (!matcher.matches()) { return ""; } else { if (pointer.equals(source)) { //只能输入一个小数点 return ""; } } //验证小数点精度,保证小数点后只能输入两位 int index = desttext.indexof(pointer); int length = dend - index; if (length > pointer_length) { return dest.subsequence(dstart, dend); } } else { //没有输入小数点的情况下,只能输入小数点和数字,但首位不能输入小数点和0 if (!matcher.matches()) { return ""; } else { if ((pointer.equals(source) || zero.equals(source)) && textutils.isempty(desttext)) { return ""; } } } //验证输入金额的大小 double sumtext = double.parsedouble(desttext + sourcetext); if (sumtext > max_value) { return dest.subsequence(dstart, dend); } return dest.subsequence(dstart, dend) + sourcetext; } }
使用方法如下:
上一篇: python处理xml文件的方法小结
下一篇: STM32(HAL)——CAN通信