Android对EditText做输入限制
来源:互联网 发布:mynba2k18网络维护中 编辑:程序博客网 时间:2024/06/05 19:09
本文章源码下载地址:EditLimitTest
Android很多情况下需要让用户只输入数字或者小数,因此都会在xml中设置其输入属性:
android:inputType="numberDecimal"
但是光这样可不行,如果用户只输入“.”,那么由于这个“.”是字符串而不是数字,因此会引起程序崩溃。
解决的方法一般有两种:
1、获取用户的输入,对用户的输入进行判断,不符合则提示用户重新输入。该方式用户体验较差。
2、可以对输入框的输入进行限制,不让用户输入不该输入的字符。该方式用户体验较好。
这里使用InputFilter实现限制用户输入。代码如下所示:
package com.jinuo.mhwang.editinputlimittest;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.text.InputFilter;import android.text.Spanned;import android.util.Log;import android.widget.EditText;import java.util.regex.Matcher;import java.util.regex.Pattern;public class MainActivity extends AppCompatActivity { /** * "."号相对于字符串长度偏移量 */ public static final int POINT_OFFSET = 3; /** * 取得点的最少长度 */ public static final int GET_POINT_LOWEST_LENGTH = 4; /** * 可以输入的最大数 */ public static final double MAX_INPUT = 100.0; /** * 输入限制的正则表达式 */ public static final String REGEX_INPUT_LIMIT = "[0-9.]"; EditText et_beLimited; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et_beLimited = (EditText) findViewById(R.id.et_beLimited); et_beLimited.setFilters(new InputFilter[]{getLimitFilter()}); } private InputFilter getLimitFilter(){ InputFilter filter = new InputFilter() { @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { Log.d("------>", "source is "+source.toString()+ // 本次输入字符 "\nstart is "+start+ // start和end一般为0和1,即sorce长度 "\nend is "+end+ "\ndest is "+dest+ // 上一次输入内容 "\ndstart is "+dstart+ // 光标开始位置 "\ndend is "+dend); // 光标结束位置 // 限制1:只能输入数字和"." Pattern p = Pattern.compile(REGEX_INPUT_LIMIT); Matcher matcher = p.matcher(source.toString()); if (!matcher.find()){ return ""; } // 限制2:首位不能输入"." if (dend == 0 && source.toString().equals(".")){ return ""; // 这里如果返回null无效 } // 限制3:如果已经有“.”,则不能再输入“.” if (dest.toString().contains(".") && source.equals(".")){ return ""; } // 限制4:如果上一个字符为0,则下一位只能输入点 if (dest.toString().equals("0") && !source.toString().equals(".")){ return ""; } // 限制5:如果大于100.0,则不能输入 double inputNum = Double.parseDouble(dest.toString()+source); if (inputNum > MAX_INPUT){ return ""; } // 限制6:如果上次上两位数前是".",则不能再输入(0.01长度为4) if (dest.length() >= GET_POINT_LOWEST_LENGTH && dest.charAt(dest.length()-POINT_OFFSET) == '.'){ return ""; } return null; } }; return filter; }}
需要注意的是,使用InputFilter后,原先设置的android:inputType="numberDecimal"
将不再生效,所以需要添加限制1。
以下为效果图:
阅读全文
0 0
- Android对EditText做输入限制
- android EditText输入限制
- android EditText输入限制
- Android EditText 输入限制
- android Edittext 限制输入
- android EditText输入限制
- android EditText输入限制
- Android EditText输入限制
- android 小技巧3-edittext做输入限制
- android EditText 对输入字数和内容范围进行限制
- Android EditText 对输入字数和内容范围进行限制
- 【Android】对EditText输入金额添加限制及监听
- Android editText 输入字数限制
- Android:EditText限制文字输入
- android EditText限制输入长度
- Android EditText限制输入长度
- android editText 输入字数限制
- Android editText 输入字数限制
- Apcahe+Python Webserver 显示乱码问题
- caffe vs 2013 cpu 训练minist
- 每天进步一点点——五分钟理解一致性哈希算法(consistent hashing)
- openfire服务的安装(二)
- CF GYM 100741 A Queries
- Android对EditText做输入限制
- python使用递归、尾递归、循环三种方式实现斐波那契数列
- Python3 怎么将Unicode转中文,以及GBK乱码ÖйúÉÙÊýÃñ×åÌØÉ«´åÕ¯
- webrtc视频采集
- 猜数游戏-牛客三模
- muduo库源码分析(3):异常类
- java 时间处理
- Easy UI
- 2017 Multi-University Training Contest 2 solutions BY 电子科技大学