前段时间比较忙 没来的及时分享出来.需求是这样的要求用户只能输入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;
}
- 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 = 0;
- for (int i = 0; i < text.length(); i++) {
- <span style="white-space:pre"> </span>//<span style="font-family: 'Microsoft YaHei', 微软雅黑, 'Microsoft JhengHei', 华文细黑, STHeiti, MingLiu;">text.charAt(i)获取当前字符是的chart值跟具ASCII对应关系255以前的都是英文或者符号之等而中文并不在这里面所以此方法可行</span>
- if (text.charAt(i) > 255) {
- length += 2;
- } else {
- length++;
- }
- }
- return length;
- }
代码还有进步的空间有什么问题请及时提出
- 顶
- 0
- 踩
- 0
我的同类文章
android(8)
- •Android 继承SwipeRefreshLayout添加上拉加载事件2015-10-10阅读128
- •android 小米手机弹出框(自定义dialog)位置不居中解决方法2015-07-31阅读494
- •android 数据存储技术(1/4)androidSQLite数据库存储2015-05-05阅读105
- •android 数据存储技术(1/4)android中sharedPreferences2015-04-24阅读155
- •Android ViewPager多页面滑动切换以及动画效果2015-07-31阅读136
- •android 数据存储技术(1/4)android中网络存储2015-05-05阅读96
- •android 数据存储技术(1/4)文件存储2015-04-24阅读159
- •android圆形头像的选择和剪切并存储出圆形图片2015-03-04阅读775
参考知识库
-
Android知识库
20802关注|1808收录
- 猜你在找
AndroidEditText限制文字输入限制Android的EditText输入文字时换行Android中限制EditText输入框文字输入长度android如何改变editText控件中部分文字的格式Android开发技术点1Fragment中EditText文字的记忆性
查看评论
暂无评论
发表评论
- 用 户 名:
- firelightdragon
- 评论内容:
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
核心技术类目
全部主题 Hadoop AWS 移动游戏 Java Android iOS Swift 智能硬件 Docker OpenStack VPN Spark ERPIE10 Eclipse CRM JavaScript 数据库 Ubuntu NFC WAP jQuery BI HTML5 Spring Apache .NET API HTML SDK IIS Fedora XML LBS Unity Splashtop UML components Windows Mobile Rails QEMU KDE Cassandra CloudStack FTC coremail OPhone CouchBase 云计算 iOS6 Rackspace Web App SpringSide Maemo Compuware 大数据 aptech Perl Tornado Ruby Hibernate ThinkPHP HBase Pure Solr Angular Cloud Foundry Redis Scala Django Bootstrap