前段时间比较忙 没来的及时分享出来.需求是这样的要求用户只能输入12个字符或者6位中文的数据:作为一个菜鸟遇到这样的问题第一反应就是 Android:maxLength="12"这么个属性然而去测试发现中文也是十二个的瞬间被上司叫过去就是一顿说。没办法还得改方法可是作为菜鸟的我只知道这一个方法;只能去百度了打开百度以后发现大部分方法都是一样都是用editText.addTextChangedListener()这个方法处理的;可是作为菜鸟的我对于这方法还是不熟悉于是运行过程中出现了各种问题。。几近周折还是没解决,时间实在赶没办法换个方法于是找到了这个方式editText.setFilters( new InputFilter[]{new InputFilter.LengthFilter(MAX_LENGTH) });一开始也是一对问题直到在http://www.android100.org/html/201406/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代表匹配成功
@Override
public 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 = ;
for (int i = ; i < text.length(); i++) {
// text.charAt(i)获取当前字符是的chart值跟具ASCII对应关系255以前的都是英文或者符号之等而中文并不在这里面所以此方法可行</span>
if (text.charAt(i) > ) {
length += ;
} else {
length++;
}
}
return length;
}
[html] view plain copy

 

print?

  1. mEditText.setFilters(new InputFilter[]{new InputFilter() {
  2. // 这个方法,返回空字符串,就代表匹配不成功,返回null代表匹配成功
  3. @Override
  4. public CharSequence filter(CharSequence source, int start, int end,
  5. Spanned dest, int dstart, int dend) {
  6. // 获取字符个数(一个中文算2个字符)
  7. if (getTextLength(dest.toString())
  8. + getTextLength(source.toString()) >= MAX_LENGTH) {
  9. return "";
  10. }
  11. return null;
  12. }
  13. }});

 getTextLength(String text);方法
[html] view plain copy

 

print?

  1. /**
  2. * 获取字符数量 汉字占2个,英文占一个
  3. *
  4. * @param text
  5. * @return
  6. */
  7. public static double getTextLength(String text) {
  8. double length = 0;
  9. for (int i = 0; i < text.length(); i++) {
[html] view plain copy

 

print?

  1. <span style="white-space:pre">    </span>//<span style="font-family: 'Microsoft YaHei', 微软雅黑, 'Microsoft JhengHei', 华文细黑, STHeiti, MingLiu;">text.charAt(i)获取当前字符是的chart值跟具ASCII对应关系255以前的都是英文或者符号之等而中文并不在这里面所以此方法可行</span>
  2. if (text.charAt(i) > 255) {
  3. length += 2;
  4. } else {
  5. length++;
  6. }
  7. }
  8. return length;
  9. }

代码还有进步的空间有什么问题请及时提出

 
0

0
 
 

参考知识库

Android知识库

20802关注|1808收录

猜你在找
查看评论
  暂无评论

 
 
发表评论
  • 用 户 名:
  • firelightdragon
  • 评论内容:
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
 
 
 
 

Android 实现限制EditText输入文字的数量的更多相关文章

  1. Android实现限制EditText输入文字的数量

    一: 声明控件.          TextView hasnumTV;         TextView hasnum;// 用来显示剩余字数         int num = 50;// 限制的 ...

  2. android技巧:EditText输入错误时该怎样提示用户

    验证用户输入内容(EditText)应该及时准确的告诉用户,那么在Android系统中提示用户通常有以下做法: 1) 使用Toast提示 1 Toast.makeText(this, "邮箱 ...

  3. Android监听EditText输入字符串,删除指定的字符

    alert_ed = (EditText) a.findViewById(R.id.alert_ed_queue_num); alert_ed.addTextChangedListener(mText ...

  4. Android控件之EditText(输入文本框控件)

    一.EditText控件概述 EditText是一个非常重要的组件,可以说他是用户和Android应用进行数据传输窗口  有了他就等于有了一扇和Android应用传输的门,通过他用户可以把数据传输给A ...

  5. Android编程 EditView 中如何设置最多可以输入的字符数量 属性 android:ems 与 android:maxLength 的区别

    最近有一个新的感悟,那就是工作的时候千万不要遇到那种特要人无语的领导,很不幸我现在就遇到了这样的一个领导,说是要给领导认识的一个熟人家的孩子写本科毕业设计预算把我给派过去给本科生写毕业设计,这事情的确 ...

  6. android代码设置EditText只输入数字、字母

     如何设置EditText,使得只能输入数字或者某些字母呢? 一.设置EditText,只输入数字: 方法1:直接生成DigitsKeyListener对象就可以了. et_1.setKeyLis ...

  7. Android EditText输入字数限制总结(包含中文输入内存溢出的解决方法)

    转载请注明,大飞:http://blog.csdn.net/rflyee/article/details/38856539 限定EditText输入个数的解决方式非常多,可是一般主要考虑两点.也就是处 ...

  8. android中实现在矩形框中输入文字,可以显示剩余字数的功能

    虽然这两个功能都比较简单,但是在实际app开发中真的很常见,特别是显示字数或剩余字数这个功能 如下图: 要实现上面的功能,需要做到三点: 1.实现矩形框布局 思路就是矩形框作为整个布局的一个backg ...

  9. Android EditText输入格式设置

    在开发的过程中,通常会用到EditText,如何让虚拟键盘来适应输入框中内容的类型,通常我们都会在xml文件中加入android:inputType="". android:inp ...

随机推荐

  1. 洛谷 P1068 分数线划定

    P1068 分数线划定 题目描述 世博会志愿者的选拔工作正在 A 市如火如荼的进行.为了选拔最合适的人才,A 市对 所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试.面试分数线根 据 ...

  2. amazeui学习笔记二(进阶开发3)--HTML/CSS规范Rules

    amazeui学习笔记二(进阶开发3)--HTML/CSS规范Rules 一.总结 1.am:以 am 为命名空间 2.模块状态: {命名空间}-{模块名}-{状态描述} 3.子模块: {命名空间}- ...

  3. 1.1 Introduction中 Apache Kafka™ is a distributed streaming platform. What exactly does that mean?(官网剖析)(博主推荐)

    不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ Apache Kafka™ is a distributed streaming p ...

  4. 计算机系统—CPU结构和内部工作

    一.计算机系统硬件组成 计算机系统的基本组成由:计算器.控制器.存储器.输入和输出设备这5大核心部件组成. 运算器和控制器等继承在一起成为CPU.以下通过这张图能够非常清楚的表达计算机系统.先从全局上 ...

  5. Traveler Nobita (zoj 3456 最小生成树)

    Traveler Nobita Time Limit: 2 Seconds      Memory Limit: 65536 KB One day, Nobita used a time machin ...

  6. SSH进阶(2)——用Struts拦截器实现登陆限制

    拦截器从字面意思来看就是限制.限制用户訪问某些网页.在Action提出请求之前用拦截器来做权限设置,让符合的用户跳入对应的界面中.近期做的一个商城项目中就用到了自己定义的拦截器,实现了一个简单的ses ...

  7. StackExchange.Redis 官方文档

    原文:StackExchange.Redis 官方文档 时隔多年的翻译终于完成了第六个,也是很重要的的官方文档,是介绍有关链接管理,管道流水线和多路复用的 官方地址在这里:官方文档 下面做个汇总: S ...

  8. ThreadLocal深入理解与内存泄露分析

    ThreadLocal 当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本.所以每个线程都能够独立地改变自己的副本.而不会影响其他线程所相应的副本. ...

  9. 一起talk C栗子吧(第八回:C语言实例--素数)

    各位看官们,大家好,从今天開始.我们讲大型章回体科技小说 :C栗子,也就是C语言实例. 闲话休提, 言归正转. 让我们一起talk C栗子吧! 看官们.上一回中咱们说的是进制转换的样例,这一回咱们说的 ...

  10. 全双工 串口 stm32