前段时间比较忙 没来的及时分享出来.需求是这样的要求用户只能输入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 = 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;
- }
- }});
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文字的记忆性
核心技术类目
全部主题
Hadoop
AWS
移动游戏
Java
Android
iOS
Swift
智能硬件
Docker
OpenStack
VPN
Spark
ERP
IE10
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
暂无评论