关于EditText的android:maxLength属性的注意事项
一直以为在xml布局文件中对EditText添加 android:maxLength="30";属性是控制EditText字符数的。想当然的以为一个中文占2个字符,一个英文占1个字符。结果的结果当然不是了。
确切的说来android:maxLength="30"是对EditText的字数进行控制的。不管中文还是英文。都是30个字。这下麻烦了,查了整个API就没发现有真正是对字符进行控制的。最后发现只能用自定义的InputFilter来实现。
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; @Override
protected 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;
} @Override
public 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;
}
} }
/*
* 使用输入过滤器约束用户输入
* (只能输入两个大写字母)
* setFilters方法需要调用一个InputFilter对象数组。
* 本例中将所有输入的小写字母自动转换为大写字母,而且被限定在
* 两个字符
*/
EditText text_f = (EditText)findViewById(R.id.editText01);
text_f.setFilters(new InputFilter[]{
new InputFilter.AllCaps(),
new InputFilter.LengthFilter(2)
});
参考链接:http://blog.csdn.net/songzhiyong1121/article/details/8758902
关于EditText的android:maxLength属性的注意事项的更多相关文章
- android gravity属性 和 weight属性
		来看这个布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:and ... 
- 【转】android gravity属性 和 weight属性
		有点忘记这两个属性了,复习一下. 来看这个布局文件 <?xml version="1.0" encoding="utf-8"?> <Linea ... 
- Android编程  EditView 中如何设置最多可以输入的字符数量     属性 android:ems 与 android:maxLength 的区别
		最近有一个新的感悟,那就是工作的时候千万不要遇到那种特要人无语的领导,很不幸我现在就遇到了这样的一个领导,说是要给领导认识的一个熟人家的孩子写本科毕业设计预算把我给派过去给本科生写毕业设计,这事情的确 ... 
- Android——edittext的几个属性
		<EditText android:layout_columnSpan="2" android:hint="To" android:layout_grav ... 
- Android布局属性大全
		RelativeLayout http://wenku.baidu.com/view/2e39724333687e21af45a97e.html?from=related&hasrec=1 h ... 
- android layout 属性大全
		第一类:属性值为true可false android:layout_centerHrizontal 水平居中 android:layout_centerVertical 垂直居中 android:la ... 
- Android TextView属性
		android:autoLink设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接.可选值(none/web/email/phone/map/all)android:a ... 
- Android TextEdit属性
		EditText继承关系:View-->TextView-->EditText 去掉边框 将EditText属性设置修改 android:background="@null&qu ... 
- Android——TextView属性XML详解
		Android_TextView属性XML详解 博客分类: android 属性名称 描述 android:autoLink 设置是否当文本为URL链接/email/电话号码/map时 ... 
随机推荐
- 【CImg】基本像素操作
			继openCV之后接触的又一个C++视觉库——短小精干的CImg 刚开始接触的时候真的是..几乎无从下手,网上资料比较少,但发现有一篇非常有用的中文手册:http://wenku.baidu.com/ ... 
- HDU_1180_诡异的楼梯_BFS
			链接:http://acm.hdu.edu.cn/showproblem.php?pid=1180 诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others) Me ... 
- MFC窗体大小变化
			对话框的大小变化后,假若对话框上的控件大小不变化,看起来会比较难看.下面就介绍怎么让对话框上的控件随着对话框的大小的变化自动调整. 首先明确的是Windows有一个WM_SIZE消息响应函数,这个函数 ... 
- yii  在lnmp下访问问题
			lnmp大坑 /usr/local/nginx/conf/fastcgi.conf 文件里面 
- 如何快速的vue init 属于自己的vue模板?
			相信很多接触过vue的小伙伴非常熟悉了,我们在开启项目之前都需要vue init webpack xx来初始化自己的项目目录.但是在实际开发中我们往往会根据公司要求或者业务的需要会对目录进行局部的调整 ... 
- [angular1.6]Error: "transition superseded"  ui-router 在angular1.6 报错误问题解决
			在angular1.6版本里,使用ui-router如果报这个错误,可以将ui-router升级到最近版本即可.ui-router version v0.4.2 
- mysql如何将一个字段多个类型串成一个字符串?
			结论 先说结论,可以使用group_concat group by的组合实现多行变一行,将一个字段的多个类型串成一个字段 需求: 如题,一个字段如电影类别,一部电影可以是多个类别,如喜剧.动作片等,其 ... 
- C++ volatile关键字(转)
			文章来源: http://hedengcheng.com/?p=725 https://www.cnblogs.com/god-of-death/p/7852394.html 1.基本概念 volat ... 
- 初识 MyBatis
			框架技术 使用框架构建项目,当确定使用哪个技术框架后,就已经有了一个 “半成品”,然后在这个半成品上填上内容,完成任务需求. 框架技术的优点: (1)不用再考虑公共问题,框架已经帮我们做好了. (2) ... 
- hdu 5122(2014ACM/ICPC亚洲区北京站) K题 K.Bro Sorting
			传送门 对于错想成lis的解法,提供一组反例 1 3 4 2 5同时对于这次案例也可以观察出解法:对于每一个数,如果存在比它小的数在它后面,它势必需要移动,因为只能小的数无法向右移动,而且每一次移动都 ... 
