首页 > 代码库 > 自定义EditText动态控制输入的字符数量
自定义EditText动态控制输入的字符数量
在开发中难免会遇到要控制字符数量的输入限制,比如用户的名字会让你输入10个字符(意思是英文可以输入10个但是汉字只可以输入5个),也许第一反应会在xml中设置EditText的长度,这种情况肯定是达不到我们的要求的。下面介绍一下自己的方法。
1.声明一个类继承InputFilter,实现filter中的方法,下面有详细的注解读者可以仔细看下
public class MyLenghtFilter implements InputFilter {
int nMax=0; int keep=0; public MyLenghtFilter(int nMax){ this.nMax=nMax; } /** * 以下是个人的理解 */ @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend){ //end是要输入的字符长度 dstart,dend默认再输入字符的时候二个长度是想等的 //在输入法中执行删除字符时 dstart显示的删除后的字符长度,dend显示的时删除前的字符长度 try { keep = nMax - (dest.toString().getBytes("GBK").length - (dend - dstart)); if(keep<= 0) {//此处判断已输入的字符长度是否大于等于最大长度 return ""; }else if(keep >=source.toString().getBytes("GBK").length - start){//判断输入的字符长度要是小于最大长度则返回输入的字符 return null; }else { return source.subSequence(start,(start + keep)/2);//要是输入的长度大于最大长度则截取前面的几个字符输出 } }catch (UnsupportedEncodingException e) { e.printStackTrace(); } return null; } }2.自定义EditText如下
public class MyEditText extends EditText { public MyEditText(Context context) { super(context); } public void setFileter(int maxLen){ this.setFilters(new InputFilter[]{new MyLenghtFilter(maxLen)}); } public MyEditText(Context context, AttributeSet attrs) { super(context, attrs); if(attrs!=null){ TypedArray typedArray=context.obtainStyledAttributes(attrs,R.styleable.myEditInfo); setFileter(typedArray.getInt(R.styleable.myEditInfo_maxlen,100)); typedArray.recycle(); } } }
<resources> <declare-styleable name="myAutoInfo"> <attr name="au_background" format="reference"/> <attr name="focuseable" format="boolean"/> <attr name="textsize" format="dimension"></attr> </declare-styleable> </resources>在这类中用了自定义属性方便在xml中设置要控制输入的长度。
要是读取还有更好的方法,欢迎留言告诉我。
自定义EditText动态控制输入的字符数量
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。