金额输入框 MoneyView
来源:互联网 发布:淘宝会员id在哪里查看 编辑:程序博客网 时间:2024/06/05 19:22
金额输入框 MoneyView
在我们开发APP的过程当中,各种各样的输入框,在之前的一篇博客中我写过一个可以自定义显示模板的EditText XEditText类,有需要的可以点击查看,今天就共享一个开发中也很常见的EditText输入框,那就是金额输入框。
GitHub 传送门 GitHub_MoneyView控件
废话不多说,上图效果展示:
主要功能
- 指定小数点后能保存的小数位数;
- 指定从多少位开始到最后不能为小数点;
- 当第一个输入的为小数点时,自动在小数点前面拼接 0,组成 0.的形式;
- 当第一个输入的为0时,如果接着输入0,仍然显示0;如果接着输入大于0的数,就用后面输入的数将0替换.
使用
1)使用代码指定属性
① 布局文件中指定控件
<com.renj.moneyview.weight.MoneyViewandroid:id="@+id/moneyview1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="12dp" android:hint="输入金额,代码指定属性" android:textColor="@color/colorPrimary" />
② 在代码中找到控件并设置属性
MoneyView moneyView1 = (MoneyView) findViewById(R.id.moneyview1); moneyView1 .setMaxLength(7) .setDecimalLength(3) .setPointCannotPosition(5) .setMoneyChangeListener(new MoneyView.MoneyChangeListener() { @Override public void afterTextChanged(Editable s) { Log.i("MainActivity", "afterTextChanged => " + s); } });
2)在布局文件中指定属性
直接在布局文件中指定就可以了,不需要在代码里进行指定属性就可以实现功能
<com.renj.moneyview.weight.MoneyView android:id="@+id/moneyview2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="12dp" android:hint="输入金额,xml中指定属性" android:textColor="@color/colorPrimary" app:decimal_length="2" app:max_length="9" app:point_cannot_position="8" />
自定义属性说明
<declare-styleable name="MoneyView"> <!--设置控件输入内容的最大长度,包含小数点,只有设置了这个属性时,在超出长度之后才会弹出Toast提示, 如果设置了系统的 android:maxLength 属性,那么在这个属性将失效,超过长度也不会弹出Toast提示。--> <attr name="max_length" format="integer" /> <!--小数点后保持的位数,当小于等于0时,表示不控制小数点的位数--> <attr name="decimal_length" format="integer" /> <!--指定从多少位开始到最后不能是小数点,当小于等于1时表示控制小数点的位置。 默认最后一位不能是小数点--> <attr name="point_cannot_position" format="integer" /></declare-styleable>
核心代码
主要在EditText的监听回调方法中做相应的操作
// 设置监听 addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { if (mMoneyChangeListener != null) mMoneyChangeListener.beforeTextChanged(s, start, count, after); } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { int currentLength = s.toString().length(); // 判断最大长度,如果在布局文件中是使用 android:maxLength="11" 属性设置了最大长度,这段代码将不会被执行 if (currentLength > mMaxLength) { Toast.makeText(getContext(), "最大输入" + mMaxLength + "位数", Toast.LENGTH_SHORT).show(); getText().delete(currentLength - 1, currentLength); currentLength = s.toString().length(); } // 判断 mPointCannotPosition 值是否大于1 if (mPointCannotPosition > 1) { // 判断 当前的长度和是否为不能是小数点的位置并比较当前位置是否为小数点 if (currentLength >= mPointCannotPosition && s.charAt(currentLength - 1) == '.') { Toast.makeText(getContext(), "第" + mPointCannotPosition + "位开始不能是小数点", Toast.LENGTH_SHORT).show(); getText().delete(currentLength - 1, currentLength); currentLength = s.toString().length(); } } // 判断 mDecimalLength 值是否大于0 if (mDecimalLength > 0) { // 计算小数点后面的位数, 判断 小数点后能保持的最大位数 if (s.toString().contains(".") && (s.length() - 1) - (s.toString().indexOf(".")) > mDecimalLength) { Toast.makeText(getContext(), "小数点后只能保持" + mDecimalLength + "位", Toast.LENGTH_SHORT).show(); getText().delete(currentLength - 1, currentLength); currentLength = s.toString().length(); } } // 如果输入的第一位是点,那么就在前面加一个0 if (currentLength == 1 && s.charAt(0) == ('.')) { getText().insert(0, "0"); currentLength = s.toString().length(); } // 如果第一个输入的是0,那么后面再输入0就仍然是显示0,如果输入大于0的数就用后一个数将0代替,如果输入点就正常输入 if (s.toString().startsWith("0") && currentLength > 1) { if (!s.toString().substring(1, 2).equals(".")) { // 以0开始并且第二位不是点 CharSequence sequence = s.subSequence(1, currentLength); getText().clear(); getText().append(sequence); } } if (mMoneyChangeListener != null) mMoneyChangeListener.onTextChanged(s, start, before, count); } @Override public void afterTextChanged(Editable s) { if (mMoneyChangeListener != null) mMoneyChangeListener.afterTextChanged(s); } });
阅读全文
0 0
- 金额输入框 MoneyView
- Android 自定义View金额、价格样式显示MoneyView
- 金额输入框正则表达式,金额校验
- 金额框(输入框限制)
- 自定义控件-金额输入框
- UITextField作为金额输入框,输入限制
- iOS UITextField设置金额(钱数)输入框
- android 金额输入框(小数点后两位)
- 仿微信充值金额输入框-自定义EditText
- 实现js输入框只允许输入金额
- Android金额输入框只允许输入小数点后两位
- 输入金额代码
- js金额输入规则
- Android EditText输入金额
- 设置EditText输入金额
- EditText输入金额格式
- iOS输入金额限制
- 金额输入校验测试
- Capstone日志2017-12-11
- spoon各个控件的说明
- Win8.1下安装ubuntu16.04双系统
- 51Nod 1428 活动安排问题 贪心+优先队列
- .NET程序四舍五入
- 金额输入框 MoneyView
- 分割问题中“类间竞争”是怎么回事
- [算法分析与设计] leetcode 每周一题: Minimum Time Difference
- DevexpressGridControl禁止点击单元格修改
- Reinforcement Learning_By David Silver笔记五: Model Free Control
- Android6.0运行时权限解析,RxPermissions的使用,自己封装一套权限框架
- Mybatis3.2.8 使用
- 【知了堂学习笔记】_Java中cookie的学习
- MySQL InnoDB锁机制之Gap Lock、Next-Key Lock、Record Lock解析