【Android】对EditText输入金额添加限制及监听
来源:互联网 发布:左轮吉他淘宝网 编辑:程序博客网 时间:2024/05/19 03:18
场景分析:
项目中我们需要在一个EditText控件中输入金额,限制只能输入数字,可以为小数但保留2位小数,同时监听EditText一旦发现输入金额大于0那么使界面上的提交按钮可点。
第一步:设置EditText的xml属性
<EditText android:id="@+id/edt_money" android:layout_width="wrap_content" android:layout_height="match_parent" android:inputType="numberDecimal" android:maxLength="12" android:singleLine="true" />numberDecimal设置可输入小数
maxLength设置可输入的最大字符数
singleLine设置单行显示
第二步:给EditText添加输入过滤
import android.text.InputFilter;import android.text.Spanned;import android.text.TextUtils;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * 金额输入过滤 * Created by ccwant on 2016/9/8. */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 输入de内容 */ @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 = destText.length() - index; //如果长度大于2,并且新插入字符在小数点之后 if (length > POINTER_LENGTH && index<dstart) { //超出2位返回null return ""; } } else { //没有输入小数点的情况下,只能输入小数点和数字,但首位不能输入小数点 if (!matcher.matches()) { return ""; } else { if ((POINTER.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; }}
第三步:设置输入监听
/** * 金额监听器 * 用户监听金额的输入,从而控制按钮 */ class MoneyTextWatcher implements TextWatcher { @Override public void afterTextChanged(Editable s) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if(s.toString().trim().length()>0){ final String m=s.toString(); if(TextValidateUtil.isDouble(m)){ Double money=Double.parseDouble(m); if(money>0){ mBtnSubmit.setEnabled(true); } }else{ mBtnSubmit.setEnabled(false); } }else{ mBtnSubmit.setEnabled(false); } } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } }
0 0
- 【Android】对EditText输入金额添加限制及监听
- Android开发中给EditText控件添加TextWatcher监听实现对输入字数的限制
- Android EditText输入金额
- Android对EditText做输入限制
- EditText金额输入(限制输入金额大小和小数点后两位)
- Android 动态限制EditText输入的字条类型及键盘类型、对输入的监控
- EditText限制输入金额(价格)格式
- Android实现EditText输入金额
- Android实现EditText输入金额
- android EditText输入限制
- android EditText输入限制
- Android EditText 输入限制
- android Edittext 限制输入
- android EditText输入限制
- android EditText输入限制
- Android EditText输入限制
- Android EditText 监听输入
- Android EditText输入监听
- hihocoder#1055 : 刷油漆 算法详解以及java源码实现
- String,StringBuilder,StringBuffer有什么不同
- Ubuntu16.04下NFS调试rootfs
- linux sed命令详解
- 一个基于ffmpeg的简易视频播放器
- 【Android】对EditText输入金额添加限制及监听
- 追MM与23种设计模式[转]
- Andfix使用说明
- 属性
- 3年的成果之一,希望大家支持
- Robotium学习(一)
- Java技术提供了从现实世界到应用软件世界的对象建模能
- Java设计模式——策略模式实现及原理
- 研究生二年级,9月到11月作息时间表,努力坚持,加油!!!