前段时间比较忙 没来的及时分享出来.需求是这样的要求用户只能输入12个字符或者6位中文的数据:作为一个菜鸟遇到这样的问题第一反应就是Android:maxLength="12"这么个属性然而去测试发现中文也是十二个的瞬间被上司叫过去就是一顿说。没办法还得改方法可是作为菜鸟的我只知道这一个方法;只能去百度了打开百度以后发现大部分方法都是一样都是用editText.addTextChangedListener()这个方法处理的;可是作为菜鸟的我对于这方法还是不熟悉于是运行过程中出现了各种问题。。几近周折还是没解决,时间实在赶没办法换个方法于是找到了这个方式editText.setFilters( new InputFilter[]{new InputFilter.LengthFilter(MAX_LENGTH) });一开始也是一对问题直到在/html/06/03/16568.html网站找到了这么个方法
InputFilter filter = new InputFilter() { public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { for (int i = start; i < end; i++) { if ( !Character.isLetterOrDigit(source.charAt(i)) && !Character.toString(source.charAt(i)) .equals("_") && !Character.toString(source.charAt(i)) .equals("-")) { return ""; } } return null; } };
但是看不懂也不知道是什么意思啊一开始没有管。。问题没解决找了个大牛询问最终得到了结果如下: // 这个方法,返回空字符串,就代表匹配不成功,返回null代表匹配成功 public CharSequence filter(CharSequence source, int start, int end,Spanned dest, int dstart, int dend) 经过大牛的提点算是奔着完成任务写代码的方式实现了最终的需求代码如下:
mEditText.setFilters(new InputFilter[]{new InputFilter() {// 这个方法,返回空字符串,就代表匹配不成功,返回null代表匹配成功 @Overridepublic CharSequence filter(CharSequence source, int start, int end,Spanned dest, int dstart, int dend) {// 获取字符个数(一个中文算2个字符)if (getTextLength(dest.toString())+ getTextLength(source.toString()) >= MAX_LENGTH) {return "";}return null;}}});
getTextLength(String text);方法
/*** 获取字符数量 汉字占2个,英文占一个** @param text* @return*/public static double getTextLength(String text) {double length = 0;for (int i = 0; i < text.length(); i++) {// text.charAt(i)获取当前字符是的chart值跟具ASCII对应关系255以前的都是英文或者符号之等而中文并不在这里面所以此方法可行</span>if (text.charAt(i) > 255) {length += 2;} else {length++;}}return length;}
[html]view plain copy print ? mEditText.setFilters(newInputFilter[]{newInputFilter(){//这个方法,返回空字符串,就代表匹配不成功,返回null代表匹配成功@OverridepublicCharSequencefilter(CharSequencesource,intstart,intend,Spanneddest,intdstart,intdend){//获取字符个数(一个中文算2个字符)if(getTextLength(dest.toString())+getTextLength(source.toString())>=MAX_LENGTH){return"";}returnnull;}}});
getTextLength(String text);方法[html]view plain copy print ? /***获取字符数量汉字占2个,英文占一个**@paramtext*@return*/publicstaticdoublegetTextLength(Stringtext){doublelength=0;for(inti=0;i<text.length();i++){[html]view plain copy print ? <spanstyle="white-space:pre"></span>//<spanstyle="font-family:'MicrosoftYaHei',微软雅黑,'MicrosoftJhengHei',华文细黑,STHeiti,MingLiu;">text.charAt(i)获取当前字符是的chart值跟具ASCII对应关系255以前的都是英文或者符号之等而中文并不在这里面所以此方法可行</span>if(text.charAt(i)>255){length+=2;}else{length++;}}returnlength;} 代码还有进步的空间有什么问题请及时提出顶 0 踩 0 上一篇android 关于屏幕适配下一篇android 数据存储技术(1/4)android中sharedPreferences
我的同类文章
android(8) •Android 继承SwipeRefreshLayout添加上拉加载事件-10-10阅读128•android 小米手机弹出框(自定义dialog)位置不居中解决方法-07-31阅读494•android 数据存储技术(1/4)androidSQLite数据库存储-05-05阅读105•android 数据存储技术(1/4)android中sharedPreferences-04-24阅读155 •Android ViewPager多页面滑动切换以及动画效果-07-31阅读136•android 数据存储技术(1/4)android中网络存储-05-05阅读96•android 数据存储技术(1/4)文件存储-04-24阅读159•android圆形头像的选择和剪切并存储出圆形图片-03-04阅读775参考知识库
Android知识库
20802关注|1808收录
猜你在找 Android自动化测试第一季(基础篇) Android自动化测试第二季(提高篇) Android无障碍测试环境搭建和使用技巧 Android自动化测试第三季 手把手做安卓应用开发 AndroidEditText限制文字输入 限制Android的EditText输入文字时换行 Android中限制EditText输入框文字输入长度 android如何改变editText控件中部分文字的格式 Android开发技术点1Fragment中EditText文字的记忆性查看评论
暂无评论
发表评论 用 户 名:firelightdragon 评论内容: * 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场