Android EditText实现字符过滤
来源:互联网 发布:wifi电话软件下载 编辑:程序博客网 时间:2024/05/16 06:01
转自:http://www.jianshu.com/p/bd4273c12e5b
EditText文本输入控件,在App开发中可能会遇到各种各样的要求,如只能输入数字、限定长度、不允许输入特殊字符等要求,这时候我们就要实现EditText的过滤功能,达到产品的要求。
(一)简单的过滤
EditText已经提供了一些过滤输入的属性
1、通过inputType限定
android:inputType="textCapCharacters"//前3个输入普通字符
android:inputType="textCapWords"//单词首字母大小
android:inputType="textCapSentences"//仅第一个字母大写
android:inputType="textAutoCorrect"//前两个自动完成
android:inputType="textAutoComplete"//前两个自动完成
android:inputType="textMultiLine"//多行输入
android:inputType="textImeMultiLine"//输入法多行(不一定支持)
android:inputType="textNoSuggestions"//不提示
android:inputType="textUri"//URI格式
android:inputType="textEmailAddress"//电子邮件地址格式
android:inputType="textEmailSubject"//邮件主题格式
android:inputType="textShortMessage"//短消息格式
android:inputType="textLongMessage"//长消息格式
android:inputType="textPersonName"//人名格式
android:inputType="textPostalAddress"//邮政格式
android:inputType="textPassword"//密码格式
android:inputType="numberPassword"//数字密码格式
android:inputType="textVisiblePassword"//密码可见格式
android:inputType="textWebEditText"//作为网页表单的文本格式
android:inputType="textFilter"//文本筛选格式
android:inputType="textPhonetic"//拼音输入格式
android:inputType="number"//数字格式
android:inputType="numberSigned"//有符号数字格式
android:inputType="numberDecimal"//可以带小数点的浮点格式
android:inputType="phone"//拨号键盘
android:inputType="datetime"//日期时间键盘
android:inputType="date"//日期键盘
android:inputType="time"//时间键盘
我们常用的有phone,number,numberSigned,numberDecimal等限定输入数字和textpassword,numberPassword格式.
除了inputType属性还有一个numeric属性(现在不推荐实用了,因为inputType已经包含了)android:numeric="integer"
android:numeric="signed"
android:numeric="decimal"
对应inputType的number,numberSigned,numberDecimal。
2、通过单个属性
//为true限制输入电话号码
android:phoneNumber=”true”
//为true限制输入电话号码
android:phoneNumber=”true”
//为true限制输入密码
android:password="true"
(二)使用digits属性过滤
在很多情况下我们要要满足产品复杂的需求,上面的属性可能满足不了我们。比如产品要求密码只能输入数字、字母和下划线的时候,我们就必须使用其他属性来限定了。
Android给出了digits属性来满足我们的需要,digits内容为你只能输入的字符,其他字符无法输入。如上面的需求,digits内的内容为:
<EditText android:id="@+id/editText" android:inputType="textPassword" android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012345678_" android:layout_width="match_parent" android:layout_height="wrap_content"/>
密码格式且输入必须是digits内限定的字符。通过digits属性可以根据产品需求限定输入字符。
(三)在代码中限定输入字符
xml中我们可以使用digits属性可以实现字符的限定,代码中EditText提供了setKeyListener(KeyListener )和setFilters(InputFilter[])两个方法。
1、setFilters
setFilters接收的参数是一个InputFilter类型的数组,是对输入的文字进行过滤。
如限制输入输入字数为16
editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(16)});
只能输入16位大写字母
editText.setFilters(new InputFilter[]{new InputFilter.AllCaps(),new InputFilter.LengthFilter(16)});
如限制只能输入a-z的小写字母,和输入字数为16。
editText.setFilters(new InputFilter[]{codeInputFilter,new InputFilter.LengthFilter(16)});
实现InputFilter过滤器,需要覆盖一个叫filter的方法,
public abstract CharSequence filter ( CharSequence source, //输入的文字 int start, //开始位置 int end, //结束位置 Spanned dest, //当前显示的内容 int dstart, //当前开始位置 int dend //当前结束位置 );
我们实现一个输入小写转大写的filter,且不超过16位
InputFilter switchFilter = new InputFilter() { public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { return source.toString().toUpperCase(); }};editText.setFilters(new InputFilter[]{switchFilter,new InputFilter.LengthFilter(16)});
2、setKeyListener
InputFilter提供了字符过滤,KeyListener提供了对输入键盘按键的监听。
DigitsKeyListener、NumberKeyListener是我们经常使用的,DigitsKeyListener继承了NumberKeyListener,NumberKeyListener实现了InputFilter,所以我们在使用InputFilter的时候发现也可以设置DigitsKeyListener和NumberKeyListener。
//只接受整数输入 KeyListener l = new DigitsKeyListener(fasle,false); //接受有符号整数输入 KeyListener l = new DigitsKeyListener(true,false); //接受小数,整数输入 KeyListener l = new DigitsKeyListener(false,true); //接受有符号整数/小数输入 KeyListener l = new DigitsKeyListener(true,true); editText.setKeyListener(l);
DigitsKeyListener是对数字输入的限制,NumberKeyListener则是对字符输入的限制,刚开始用差点搞反。
//字符过滤功能NumberKeyListener myKeyListener = new NumberKeyListener() { public int getInputType() { //指定键盘类型 return InputType.TYPE_CLASS_TEXT; } protected char[] getAcceptedChars() { //指定你所接受的字符 return getString("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-").toCharArray(); }};
NumberKeyListener类似于digits的使用,到这里字符过滤功能介绍完毕。
参考:Android TextView的字符过滤功能
作者:丿歌吟有梦
链接:http://www.jianshu.com/p/bd4273c12e5b
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
- Android EditText实现字符过滤
- Android EditText实现字符过滤
- Android TextView、EditText字符过滤-InputType详解
- InputFilter实现EditText过滤中文字符、空格等特殊字符
- Android 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特殊字符过滤和字符长度限制的最优方法
- Java中的switch-case语句
- H5图片上传
- Gensim源代码详解——utils(持续更新中)
- 移动端设计实践优化
- EL嵌套使用
- Android EditText实现字符过滤
- 《Python语言及其应用》读书笔记(10)之第11章并发和网络(关键词:并发/网络)
- 《deep learning》学习笔记(3)——概率与信息论
- SpringBoot JPA使用QueryDsl之gradle文件配置
- Please tell me who you are?
- Java内存管理
- 手撸一个简单的单链表
- apk反编译---smali语法
- AspectJ切面编程获取不到原始类型