java怎样控制字符数量,自定义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();

}

}

}在这类中用了自定义属性方便在xml中设置要控制输入的长度。

要是读取还有更好的方法,欢迎留言告诉我。

http://www.dengb.com/Javabc/949740.htmlwww.dengb.comtruehttp://www.dengb.com/Javabc/949740.htmlTechArticle自定义EditText动态控制输入的字符数量 在开发中难免会遇到要控制字符数量的输入限制,比如用户的名字会让你输入10个字符(意思是英文可以...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值