博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于EditText的android:maxLength属性的注意事项
阅读量:5236 次
发布时间:2019-06-14

本文共 2860 字,大约阅读时间需要 9 分钟。

一直以为在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

转载于:https://www.cnblogs.com/butterfly-clover/p/5465606.html

你可能感兴趣的文章
CSS背景颜色、背景图片、平铺、定位、固定
查看>>
口胡:[HNOI2011]数学作业
查看>>
中国剩余定理
查看>>
uva 10137 The trip
查看>>
数据库锁机制及乐观锁,悲观锁的并发控制
查看>>
03 线程池
查看>>
201771010125王瑜《面向对象程序设计(Java)》第十三周学习总结
查看>>
手机验证码执行流程
查看>>
python 基础 ----- 变量
查看>>
设计模式课程 设计模式精讲 2-2 UML类图讲解
查看>>
Silverlight 的菜单控件。(不是 Toolkit的)
查看>>
初识lua
查看>>
我是插件狂人,jDuang,jValidator,jModal,jGallery
查看>>
张季跃 201771010139《面向对象程序设计(java)》第四周学习总结
查看>>
如何解除循环引用
查看>>
android中fragment的使用及与activity之间的通信
查看>>
jquery的contains方法
查看>>
python3--算法基础:二分查找/折半查找
查看>>
Perl IO:随机读写文件
查看>>
转:基于用户投票的排名算法系列
查看>>