关于EditText的android:maxLength属性的注意事项
来源:互联网 发布:微信抓娃娃源码 编辑:程序博客网 时间:2024/05/22 10:57
哈哈,一直以为在xml布局文件中对EditText添加 android:maxLength="30";属性是控制EditText字符数的。想当然的以为一个中文占2个字符,一个英文占1个字符。结果的结果当然不是了。
确切的说来android:maxLength="30"是对EditText的字数进行控制的。不管中文还是英文。都是30个字。这下麻烦了,查了整个API就没发现有真正是对字符进行控制的。最后发现只能用自定义的InputFilter来实现。
下面附上源代码:由Jerome_Song提供:http://blog.csdn.net/songzhiyong1121/article/details/8758902
package com.example.inputfilterdemo;import java.util.regex.Matcher;import java.util.regex.Pattern;import android.app.Activity;import android.os.Bundle;import android.text.Editable;import android.text.InputFilter;import android.text.Spanned;import android.text.TextWatcher;import android.util.Log;import android.widget.EditText;import android.widget.TextView;import android.widget.Toast;/** * * ClassName:MainActivity * * @author Jerome Song * @version * @since Ver 1.1 * @Date 2013 2013-4-4 下午2:55:42 * * @see */public class MainActivity extends Activity {private EditText etTest;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);init();}private void init() {etTest = (EditText) findViewById(R.id.et_test);InputFilter[] filters = { new NameLengthFilter(16) };etTest.setFilters(filters);}private class NameLengthFilter implements InputFilter {int MAX_EN;// 最大英文/数字长度 一个汉字算两个字母String regEx = "[\\u4e00-\\u9fa5]"; // unicode编码,判断是否为汉字public NameLengthFilter(int mAX_EN) {super();MAX_EN = mAX_EN;}@Overridepublic CharSequence filter(CharSequence source, int start, int end,Spanned dest, int dstart, int dend) {int destCount = dest.toString().length()+ getChineseCount(dest.toString());int sourceCount = source.toString().length()+ getChineseCount(source.toString());if (destCount + sourceCount > MAX_EN) {Toast.makeText(MainActivity.this, getString(R.string.count),Toast.LENGTH_SHORT).show();return "";} else {return source;}}private int getChineseCount(String str) {int count = 0;Pattern p = Pattern.compile(regEx);Matcher m = p.matcher(str);while (m.find()) {for (int i = 0; i <= m.groupCount(); i++) {count = count + 1;}}return count;}}}
另外,再附上一篇比较有意思的区别maxEms和maxLength的文章。写的很生动哈哈。
Android 开发者,你真的会用textview(maxEms和maxLength)的属性吗?
- 关于EditText的android:maxLength属性的注意事项
- EditText的maxLength属性
- 关于Android的EditText的部分属性
- 关于maxlength的使用
- android关于editText的属性大全
- Android关于Edittext的inputtype属性详解
- 设置TEXTAREA的MAXLENGTH属性 .
- android edittext的属性
- android edittext的属性
- Android EditText的属性
- Android EditText 的属性
- Android的EditText属性
- android Edittext的属性
- 关于EditText的inputType属性
- android EditText maxLength动态限制
- Android maxLines maxLength属性
- Android 关于EditText文字的显示问题 和属性
- textarea的maxlength和wrap属性
- Linux系统在X86上的虚拟内存管理详解 (4)
- jquery取checkbox选中的值
- 关于HttpClient的总结
- 超级全的好电影!慢慢看!
- Gcc 优化选项注意事项
- 关于EditText的android:maxLength属性的注意事项
- 9、领域对象的三种状态
- 设计文档
- Eclipse4.3 swt 插件在线安装
- cmpp 短信去签名技术服务,欢迎前来洽谈合作
- 访问IplImage数据时的注意事项
- 关于wxFileSystemWatcher输出文件名的解决方法
- <c:foreach>用法
- 在linux下进行各厂商的GPRS,CDMA,WCDMA,CDMA200模块PPP拨号总结