android设置输入框输入字符限制,Android EditText限制输入字符的方法总结

Android EditText限制输入字符的方法总结

最近项目要求限制密码输入的字符类型, 例如不能输入中文。   现在总结一下EditText的各种实现方式,  以比较各种方法的优劣。

第一种方式:  设置EditText的inputType属性,可以通过xml或者Java文件来设置。假如我要设置为显示密码的形式,可以像下面这样设置:

在xml中,  Android:inputType="textPassword"

在java文件中,可以用 ev.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);

inputType参数有phone、textPasswrod等等属性, 有兴趣的话可以测试一下。

15058979151.png?2017621142349

第二种: 设置EditText的android:digits 属性, 这种方式可以指出要支持的字符。比如要限制只能输入数字和字母,可以这样:

android:digits="0123456789abcdefghijklmnopqrstuvwxyz"。

PS:吐槽一下,写着好累,不支持区间操作符~或-

第三种: 使用TextWather监听EditText的字符变化, 当内容改变时删掉不想要的字符。说白了就是用户可以随便按键盘,在代码里马上删掉非法字符。 PS: 常见的搜索功能输入框就是用TextWatcher监测关键词变化,然后查数据并显示出来了。示例代码:只能输入字母或者数字, 如果要支持其它字符可以修改regEx正则表达式。

evPwd = (EditText) findViewById(R.id.ev_password);

evPwd.addTextChangedListener(new TextWatcher() {

@Override

public void beforeTextChanged(CharSequence charSequence,int i,int i1,int i2) {

}

@Override

public void onTextChanged(CharSequence charSequence,int i2) {

String editable = evPwd.getText().toString();

String regEx = "[^a-zA-Z0-9]"; //只能输入字母或数字

Pattern p = Pattern.compile(regEx);

Matcher m = p.matcher(editable);

String str = m.replaceAll("").trim(); //删掉不是字母或数字的字符

if(!editable.equals(str)){

evPwd.setText(str); //设置EditText的字符

evPwd.setSelection(str.length()); //因为删除了字符,要重写设置新的光标所在位置

}

}

第四种:通过InputFilter来实现。实现InputFilter过滤器, 需要覆盖一个叫filter的方法。

public abstract CharSequence filter (

CharSequence source,//输入的文字

int start,//开始位置

int end,//结束位置

Spanned dest,//当前显示的内容

int dstart,//当前开始位置

int dend //当前结束位置

);

注意: IntentFilter是个数组, 也就是说可以写多个过滤条件!

下面的实现使得EditText只接收字符(数字、字母),Character.isLetterOrDigit会把中文也当做Letter, 所以要在写个正则判断是否中文。

evPwd.setFilters(new InputFilter[]{

new InputFilter() {

@Override

public CharSequence filter(CharSequence charSequence,Spanned spanned,int i2,int i3) {

String regex = "^[\u4E00-\u9FA5]+$";

boolean isChinese = Pattern.matches(regex,charSequence.toString());

if (!Character.isLetterOrDigit(charSequence.charAt(i)) || isChinese) {

return "";

}

return null;

}

}

});

第五种:    使用EditText的InputConnection属性限制输入字符。 新建个类继承于EditText并覆盖onCreateInputConnection函数, 在xml里使用LimitText替换EditText。

public class LimitEditText extends EditText {

public LimitEditText(Context context) {

super(context);

}

public LimitEditText(Context context,AttributeSet attrs) {

super(context,attrs);

}

public LimitEditText(Context context,AttributeSet attrs,int defStyleAttr) {

super(context,attrs,defStyleAttr);

}

/**

* 输入法

* @param outAttrs

* @return

*/

@Override

public InputConnection onCreateInputConnection(EditorInfo outAttrs) {

return new InnerInputConnecttion(super.onCreateInputConnection(outAttrs),false);

}

class InnerInputConnecttion extends InputConnectionWrapper implements InputConnection {

public mInputConnecttion(InputConnection target,boolean mutable) {

super(target,mutable);

}

/**

* 对输入的内容进行拦截

*

* @param text

* @param newCursorPosition

* @return

*/

@Override

public boolean commitText(CharSequence text,int newCursorPosition) {

// 只能输入字母或者数字

if (!Character.isLetterOrDigit(charSequence.charAt(i)) || isChinese) {

return false;

}

return super.commitText(text,newCursorPosition);

}

@Override

public boolean sendKeyEvent(KeyEvent event) {

return super.sendKeyEvent(event);

}

@Override

public boolean setSelection(int start,int end) {

return super.setSelection(start,end);

}

}

}

以上是EditText输入限制的所有方法, 大家如有疑问,请留言或到本站社区讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

小编个人微信号 jb51ccc

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/530092.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android开发按钮颜色,Android编程实现简单设置按钮颜色的方法

本文实例讲述了Android编程实现简单设置按钮颜色的方法。分享给大家供大家参考,具体如下:1.工程目录a.在res目录-新建drawble文件夹放入自定义图片2.main.xmlandroid:orientation"vertical"android:layout_width"fill_parent"androi…

艾默生变频器ev1000故障代码_国产变频器型号大全,梳理国产变频的前世今生!...

在工控领域,变频器已经广为所知且应用范围广泛,各方对变频器能给出形形色色的描述。维基百科给出的定义:“变频器(variable frequency drive,常见缩写VFD),也称为变频驱动器或驱动控制器。变频器是可调速驱动系统的一种…

单边指数信号的特点_今日股市分析:上证指数若能守住3400,蓄力反弹就有戏...

昨日整体概况上涨:848只 下跌:3009只涨停:69只 跌停:12只昨天的上证指数低开低走,午后冲红又回落,另一边的创业板却是单边下行跌超3%,板块方向农业、洪水概念股、还有电力板块较强。按照昨日置顶…

万丰科技机器人排名_机器人系统集成“7宗最”

摘要:对于众多集成商而言,作为典型的“夹心饼奥利奥”,面对客户的各种要求,“不敢勉强你,只好为难自己”系真实写照。1、企业数量最多GGII统计数据显示,截至2019年年底,中国工业机器人产业企业数…

android 电池高温关机,Android 关机问题分析指南

本篇文章主要介绍 Android 开发中的 关机 部分知识点,通过阅读本篇文章,您将收获以下内容:1 . 确认是亮屏关机还是灭屏关机?关机时是否有播放关机动画?2 . 是直接关机还是关机后会自动重启?3.异常关机时,连…

转网口显示未识别的网络_已有1700万用户携号转网 超99%用户1小时内办结

携号转网是利国利民的大举措,受到了很多电信用户的拥护和支持。12月15日,工信部副部长刘烈宏在某会议上进行报告指出,目前我国 “携号转网”服务已经累计有 1700 万用户完成携转,一小时携转成功办结率超过 99%。已有1700万用户携号…

2020.2idea怎么创建html项目_陈肆横项目日记:百度百科怎么创建自己的名字

百度百科是一个介绍人物很好的平台,很多的都想创造属于自己的百度百科。而人物百科词条,是百度百科专门为知名人物提供个人信息展示的平台。创建一个属于自己的百度百科词条,就相当于拥有了一张名片,不仅有着影响力与知名度的传播…

android c++ gizp 调用 so,使用ndk-build编译 android调用的so库

前沿编译so的方法有两种方法第一种就是编写原生的makefile文件利用gcc进行编译,这里我讲解的是另外一种。采用NDK提供的ndk-build编译。简介使用ndk编译的时候需要介绍它的脚本文件,Android.mk和Application.mk,但是Application.mk是可选的,用…

html5判断多选框是否选择的函数,复选框(checkbox)、多选框

1、需求分析可同时选中多个选项,实现全选、全不选、反选等功能。2、技术分析基础的HTML、CSS、JavaScript。3、详细分析3.1 HTML部分图示是一个列表加底部一段文字说明,列表包含三个部分,整体是一个多选列表,上部是总的选项&#…

layer调用父页面方法_Ruby for SketchUp之图层【Layer】

我们学习了群组、组件及组件定义,今天来看看图层【Layer】,在Sketchup2020版本中已经更名为“标记”,如图那么图层在我们建模过程中能带来哪些便利呢?可以快速的隐藏同一图层内所有东西,而不需要逐一选择并右键点击隐藏…

html盒子有哪些属性,盒子模型有哪些属性 在html5中哪些元素具有盒子模型

HTML盒模型基本属性有哪些CSS盒子模型就是在CSS技术所使用的一种思维模型。CSS假定所有的HTML文档元素都生成一个描述该元素在HTML文档布局中所占空间的矩形元素框,可以形象地将其看作是一个盒子。通过定义一系列与盒子相关的属性,可极大地丰富和促进各个…

huffman编码的程序流程图_F28379D之CLB解码多摩川编码器2——LIB版例程讲解(原创)...

我在第一篇文章中已经跟大家介绍过379解码多摩川编码器的一些入手小知识,链接如下TMS320F28379D之CLB解码多摩川编码器1——入手小知识(原创)请大家一定要看入手小知识,再来看例程分析。今天跟大家分析一下TI的官方例程。首先&…

html统计表合并单元格的快捷键,word怎样设置合并单元格快捷键

word2010中合并单元格的快捷键是什么?求解答。合并单元格没有快捷键,不过有个f4是重复上一步操作,所以你要合并多个单元格,那么你可以先点一合并单元格,然后选定你要合并的区域。WORD合并单元格的快捷键怎么设置word合并单元格快…

fcm 服务器接入 golang_Golang 写的即时通讯服务器 im(服务组件形式)

简要介绍im是一个即时通讯服务器,代码全部使用golang完成。主要功能1.支持tcp,websocket接入2.离线消息同步3.单用户多设备同时在线4.单聊,群聊,以及超大群聊天场景5.支持服务水平扩展gim和im有什么区别?gim可以作为一…

html 手机分辨率,移动端各种分辨率手机屏幕----适配方法集锦

1.使用viewport,html文件中在内添加meta,简单粗暴:2.加判断复杂点的viewport,可以封装成一个js,每次新建html时调用.js即可:var phoneWidth parseInt(window.screen.width);var phoneScale phoneWidth/75…

橡胶支座抗压弹性模量计算公式_隔震支座的这些力学特性您都掌握了吗?

隔震支座叠层橡胶隔震支座,是隔震设计中应用最为广泛的隔震装置。了解隔震支座的力学特性,在软件中设置正确的参数,是做好隔震设计最基本的前提。那么,隔震支座的这些特性您都掌握了吗?叠层橡胶隔震支座叠层橡胶隔震支…

asp.net button创建控件时出错_Tkinter Radiobutton控件

单选按钮是一种可在多个预先定义的选项中选择出一项的 Tkinter 控件 。单选按钮可显示文字或图片,显示文字时只能使用预设字体,该控件可以绑定一个 Python 函数或方法,当单选按钮被选择时,该函数或方法将被调用。单选按钮&#xf…

计算机师范类算师范教育类吗,师范教育类专业和计算机类专业,两者相比,哪个更适合自考生报读...

原标题:师范教育类专业和计算机类专业,两者相比,哪个更适合自考生报读一、师范教育类专业大部分毕业生的就业方向都是在教育行业,互联网的发展,教学教育有了网络课,让人们随时随地都可以学习,也…

android 绘画笔迹回放_随时记录分享书写笔迹,EverPEN高级版套装体验

看到笔记本就想起小时候,老师为了提高学生们的写作能力,而要求大家每周写3篇日记,几年下来慢慢的让自己养成了每周会抽出点时间,手写些生活中的点滴趣事。但随着笔记本保持时间有限,而且有时查找起来也不方便&#xff…

12c集群日志位置_Kubernetes(k8s)那些套路之日志收集

准备关于容器日志Docker的日志分为两类,一类是 Docker引擎日志;另一类是容器日志。引擎日志一般都交给了系统日志,不同的操作系统会放在不同的位置。本文主要介绍容器日志,容器日志可以理解是运行在容器内部的应用输出的日志&…