热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

android开发分享Android最简单的限制输入方法(只包含数字、字母和符号)

前言android的编辑框控件edittext在平常编程时会经常用到,有时候会对编辑框增加某些限制,如限制只能输入数字,最大输入的文字个数,不能输入

前言

android的编辑框控件edittext在平常编程时会经常用到,有时候会对编辑框增加某些限制,如限制只能输入数字,最大输入的文字个数,不能输入一些非法字符等,android开发分享Android最简单的限制输入方法(只包含数字、字母和符号)就来给大家介绍了一种最简单的输入限制方法。

效果图

Android最简单的限制输入方法(只包含数字、字母和符号)

github地址,欢迎点赞,fork

今天带来工作中的一个小安利,产品要求对用户名输入需要限制,只能是数字和字母,符号,不能包含空格和键盘上输入的emoji.开始拿到这个需求,觉得给 edittext 增加一个 addtextchangedlistener ,里面做各种判断不就ok 啦!

哈哈,又可以愉快的玩耍咯…

但是回调里面逻辑太多,看着也不爽,不符合我们程序员的气质,简洁大方,干净利落!所以我特意去看了 du 了一下, 结合自己的实际要求,重写了 edittext  的 oncreateinputconnection() 方法,在那里做文章,请看下面源码(如果还有不清楚的,可以留言或者看github地址)

方法如下:

只需要自定义edittext重写其oncreateinputconnection()方法,然后再定义一个内部类就好,下面代码即拷即用

首先,看看 limitedittext

  class limitedittext(context: context, attrs: attributeset, defstyleattr: int)   : edittext(context, attrs, defstyleattr) {     constructor(context: context, attrs: attributeset) : this(context, attrs, 0)     /**    * 输入法    */   override fun oncreateinputconnection(outattrs: editorinfo?): inputconnection {    return innerinputconnection(super.oncreateinputconnection(outattrs), false)   }    }    class innerinputconnection(target: inputconnection, mutable: boolean)   : inputconnectionwrapper(target, mutable) {   // 数字,字母   private val pattern = pattern.compile("^[0-9a-za-z_]$")   // 标点   private val patternchar = pattern.compile("[^\w\s]+")   // emoji   private val patternemoji = pattern.compile("[ud83cudc00-ud83cudfff]|[ud83dudc00-ud83dudfff]|[u2600-u27ff]", pattern.unicode_case or pattern.case_insensitive)   // 英文标点   private val patternen = pattern.compile("^[`~!@#$%^&*()_\-+=<>?:"{},.\\/;'\[\]]$")   // 中文标点   private val patterncn = pattern.compile("^[·!#¥(——):;“”‘、,|《。》?、【】\[\]]$")       // 对输入拦截   override fun committext(text: charsequence?, newcursorposition: int): boolean {    if (patternemoji.matcher(text).find()){     return false    }      if (pattern.matcher(text).matches() || patternchar.matcher(text).matches()) {     return super.committext(text, newcursorposition)    }    return false   }    }

总计60行代码,可以搞定一般需求啦,再来看看其布局用法(xml文件),平时怎么在布局写edittext,还是怎么写!

             

最后来看看在 activity 中用法,其实和一般普通 edittext 用法一致啦!

  class mainactivity : appcompatactivity() {     override fun oncreate(savedinstancestate: bundle?) {    super.oncreate(savedinstancestate)    setcontentview(r.layout.activity_main)      // demo 中默认 limitedittext 只能输入字母数字和标点符号      // 延时主要是更方便观察    window.decorview.postdelayed({     // 注意,获得焦点需要自己再处理下,其实很简单,如下:     let_main.isfocusable = true     let_main.isfocusableintouchmode = true     let_main.requestfocus()      },1000)   }  }

当然,这些限制正则也可以在 limitedittext 中定义方法,大家需要什么加入什么就好了!

总结

以上就是这篇文章的全部内容了,希望android开发分享Android最简单的限制输入方法(只包含数字、字母和符号)的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对<编程笔记>的支持。


推荐阅读
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • Commit1ced2a7433ea8937a1b260ea65d708f32ca7c95eintroduceda+Clonetraitboundtom ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文讨论了一个关于正则的困惑,即为什么一个函数会获取parent下所有的节点。同时提出了问题是否是正则表达式写错了。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
author-avatar
埋葬曾经的一切
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有