前段时间比较忙 没来的及时分享出来.需求是这样的要求用户只能输入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; } };
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++) { // text.charAt(i)获取当前字符是的chart值跟具ASCII对应关系255以前的都是英文或者符号之等而中文并不在这里面所以此方法可行</span> if (text.charAt(i) > 255) { length += 2; } 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;
- }
- }});
- /**
- * 获取字符数量 汉字占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 继承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收录

-
猜你在找
暂无评论